Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAccess SVG sanitization/upload endpoint
-
DeliverySubmit crafted SVG with #FIXED DTD default
-
ExploitTrigger double removeAttribute() in cleanAttributesOnWhitelist()
-
ExecutionCorrupt libxml state, terminate PHP worker
-
ImpactRepeat to exhaust worker pool and degrade availability
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource allocation limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the target application to pass attacker-supplied SVG through svg-sanitizer's sanitize() at a version prior to 1.0.0, where no DOCTYPE/DTD stripping occurred before libxml parsing. The malicious SVG must carry an internal DTD subset defining an attribute with a #FIXED default on a name that also reaches the href/remote-reference safety path, so that the first removeAttribute() deletes the explicit attribute and the DTD default re-materializes it for a second removeAttribute() call. Exploitation is limited by: the need for access to a submission/sanitization endpoint (CVSS PR:L implies at least low-privileged access, though some SVG upload flows are unauthenticated); dependence on the pre-1.0.0 code path; and the requirement that the host libxml processes the DTD default rather than stripping it. Impact is confined to availability (worker crash) - no confidentiality or integrity effect - and sustained denial requires repeated requests. |
| Impact | This is a moderate-severity availability issue, not a critical priority. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H, base 6.5) indicates a network-reachable, low-complexity attack requiring low-level privileges, with no confidentiality or integrity impact and high availability impact - consistent with the CWE-770 (unbounded resource consumption) classification and the 'Denial Of Service' tag. The real-world signals reinforce a measured posture rather than an emergency: no CISA KEV listing, no public exploit code identified, and no EPSS probability was supplied in the input, so there is no evidence of active or imminent widespread exploitation. The impact is a repeatable crash of a single PHP worker per malicious request, which can degrade or exhaust availability under sustained abuse, but it does not lead to code execution or data exposure. One caveat worth verifying: CVSS assigns PR:L (requires some privilege), yet the description frames the attacker simply as someone 'who can submit SVG content to a sanitization endpoint' - in deployments where SVG upload is unauthenticated (e.g., public avatar or file-upload forms) the effective barrier may be lower than PR:L implies. No EPSS score was provided, so exploitation likelihood cannot be quantified from the input; treat this as a patch-in-normal-cycle hardening item unless the sanitizer sits behind an unauthenticated upload path. |
| Exploit ScenarioDerived | An attacker repeatedly submits a crafted SVG containing a DTD that declares a #FIXED default for an attribute (e.g., href) to an application endpoint that runs svg-sanitizer (<1.0.0) on uploads. When the library's cleanAttributesOnWhitelist() removes the explicit attribute, the DTD default re-materializes the value and the href safety path triggers a second DOMElement::removeAttribute() on the same name, corrupting libxml state and killing the PHP worker. By looping these submissions over the network, the attacker interrupts workers and exhausts application availability. No public exploit code was identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 08, 2026
A crafted SVG carrying an internal DTD subset with a #FIXED attribute default can drive svg-sanitizer (prior to 1.0.0) into calling DOMElement::removeAttribute() twice on the same attribute name inside cleanAttributesOnWhitelist(), corrupting libxml state and terminating the PHP worker. Affected deployments are those that pass untrusted SVG through sanitize() - the vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H) indicates remote, low-privileged access with no user interaction, and impact limited strictly to availability. Repeated submissions can interrupt workers continuously and degrade or exhaust application capacity; no public exploit code and no confirmed active exploitation were identified at time of analysis.
RemediationAI
Upgrade to svg-sanitizer 1.0.0 or later, which strips DOCTYPE/DTD declarations before libxml parsing, guarantees a single removeAttribute() call per attribute name via an early continue, and hardens remote-reference detection; the release is at https://github.com/darylldoyle/svg-sanitizer/releases/tag/1.0.0 and the patch commit is https://github.com/darylldoyle/svg-sanitizer/commit/23877db7e76f1e1df5c3e65ab30239219c3d2867, with advisory detail at https://github.com/darylldoyle/svg-sanitizer/security/advisories/GHSA-v383-3rw5-q8rf (vendor-released patch: 1.0.0). If immediate upgrade is not possible, pre-strip or reject any SVG containing '<!DOCTYPE' (particularly an internal subset with attribute-list declarations using #FIXED defaults) before it reaches sanitize(), since the DTD is the sole trigger - the trade-off is that legitimate Illustrator/Inkscape exports that emit a harmless PUBLIC DOCTYPE will also be rejected unless you specifically parse and drop only the internal subset. Additionally, run SVG sanitization in a supervised worker pool with automatic restart and per-request CPU/time limits so that any worker abort degrades throughput rather than taking down the service, rate-limit or authenticate SVG submission endpoints to slow repeated abuse (the assessed vector is PR:L, so low-privileged access is a precondition in that model, but some upload flows are unauthenticated and should be throttled), and consider disabling libxml's DTD loading (e.g. LIBXML_NONET alongside entity/DTD loading restrictions) - noting that this can break documents relying on internal entity definitions and should be validated against your SVG corpus. Finally, monitor for repeated worker terminations correlated with SVG uploads as a detection signal, as impact here is availability-only and sustained denial requires repeated requests.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
svg-sanitizer is a PHP library that sanitizes untrusted SVG/XML before storage or rendering, parsing input with libxml via PHP's DOM extension. The root cause is classified as CWE-770 (Allocation of Resources Without Limits or Throttling): when an SVG supplies a DOCTYPE with an internal subset declaring an attribute with a #FIXED default, the sanitizer's cleanAttributesOnWhitelist() logic in src/Sanitizer.php removes the explicit attribute, but the DTD default causes libxml to re-materialize that attribute value (for example on an href-like attribute) before the remote-reference safety path performs a second removeAttribute() call for the same name. That double removal against a re-materialized DTD-backed attribute corrupts libxml's internal node/attribute state and aborts the PHP worker process rather than returning a clean document. The pre-1.0.0 code path also failed to strip DOCTYPE/DTD declarations before parsing and did not short-circuit attribute processing after a removal, so both the DTD-default re-materialization and the duplicate removal were reachable. The 1.0.0 fix (commit 23877db7e76f1e1df5c3e65ab30239219c3d2867) adds a removeDoctype() pre-parse pass that scans the internal subset with balanced-bracket handling, adds a continue statement after an attribute is removed so the same name is never passed to removeAttribute() twice in one iteration, and tightens remote-reference detection for url()/@import and bare href/src values.
Know when PHP gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Network-reachable sanitization endpoint with low complexity; PR:L because submitting to the endpoint typically needs minimal access; only availability affected via worker crash, so C:N/I:N/A:H.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
savg-sanitizer is a PHP SVG/XML sanitizer. Prior to 1.0.0, svg-sanitizer allows a crafted SVG DTD with a #FIXED attribute default to make cleanAttributesOnWhitelist() perform a double DOMElement::removeAttribute() call on the same attribute name in src/Sanitizer.php. The first removal deletes the explicit attribute, while the DTD default rematerializes the value before the href safety path performs the second removal, which can corrupt libxml state and terminate the PHP worker. An attacker who can submit SVG content to a sanitization endpoint can repeatedly interrupt workers and degrade or exhaust application availability. This issue is fixed in version 1.0.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-95136
GHSA-v383-3rw5-q8rf
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB