Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach SVG upload/sanitize endpoint
-
ExploitCraft well-formed XML with non-svg or nested-svg root
-
ExecutionloadXML() succeeds, XPath construction throws LogicException
-
ImpactUncaught exception crashes worker (HTTP 500) or skips upload rejection
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling completeness
|
| Exploitation Conditions | Exploitation requires a caller that passes attacker-controlled input to Sanitizer::sanitize() and (a) does NOT wrap the call in a broad catch(\Throwable), typically guarding only on a === false return - the common upload-rejection pattern the advisory describes. The specific trigger is a well-formed XML document that libxml accepts but that lacks exactly one top-level <svg> as a direct document child: a non-svg root element, a zero-<svg> document, or an <svg> nested inside another root (e.g. <html><body><svg/></body></html>); these pass loadXML() yet throw an uncaught LogicException from XPath::handleDefaultNamespace(). Affected versions are svg-sanitizer 0.11.0 up to (not including) 1.1.0. Limiting factors: a caller that already catches \Throwable is unaffected (crash avoided), and the impact is availability/robustness only - a thrown exception where false was expected can also cause the upload-rejection branch to be skipped. No authentication, user interaction, or non-default library configuration is required. |
| Impact | This is a medium-severity denial-of-service / robustness issue, not a high-impact priority. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) shows remote, low-complexity, unauthenticated reachability, but impact is confined to availability only (VC:N/VI:N/VA:L) - no confidentiality or integrity loss. SSVC reinforces moderate urgency: Exploitation=none (no observed exploitation), Automatable=yes (the trigger input is trivial to mass-produce), Technical Impact=partial. There is no CISA KEV listing and no EPSS score in the input, so there is no signal of active or widespread exploitation - consistent with SSVC Exploitation=none. The vuln.today decision label is this_month, which aligns with the medium CVSS and partial impact rather than an emergency. One nuance worth flagging: realized risk is conditional on integration style - the crash only occurs when the calling application does NOT wrap Sanitizer::sanitize() in a broad catch(\Throwable) and relies on the documented false return; the advisory notes this is common in upload paths, which is why AV:N/PR:N is defensible, but a defensively coded caller is unaffected. EPSS and KEV are both absent (not conflicting, simply not provided). |
| Exploit ScenarioDerived | An attacker uploads a well-formed XML file whose root is not a single top-level <svg> (for example a non-svg root element, or an <svg> nested under <html>/<body>) to an endpoint that passes it through svg-sanitizer. loadXML() succeeds, XPath::handleDefaultNamespace() throws an uncaught LogicException, and sanitize() crashes the request/worker (PHP fatal error / HTTP 500) instead of returning false. The GHSA advisory publishes working proof-of-concept reproduction snippets; it is not labeled as a verified weaponized exploit in the input. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Uncaught exception in svg-sanitizer (the enshrined/svg-sanitize Composer package) versions 0.11.0 through 1.0.0 lets remote attackers crash PHP workers with well-formed XML documents that lack exactly one top-level <svg> root. Because Sanitizer::sanitize() builds an XPath object without a try/catch on the documented 'returns false on bad input' path, a non-svg root, a zero-svg document, or an <svg> nested under another root throws an uncaught LogicException instead of returning false - a PHP fatal error or HTTP 500 per request, and potentially a skipped upload-rejection branch. Severity is limited to availability (CVSS v4 6.9 with A:L; independently assessed as CVSS 3.1 AV:N/AC:L/PR:N/UI:N/A:L); there is no confirmed active exploitation (not in CISA KEV) and no public exploit code confirmed working, though a public PoC reference exists in the advisory and the SSVC 'Automatable' rating is yes. Only callers that wrap sanitize() in a broad catch or guard solely on === false are exposed.
RemediationAI
Upgrade to svg-sanitizer 1.1.0, the vendor-released fixed version (composer require enshrined/svg-sanitize:^1.1.0); the fix commit is https://github.com/darylldoyle/svg-sanitizer/commit/9ba9001493f5da737759303f13bd965ebdaa778c and the advisory is https://github.com/darylldoyle/svg-sanitizer/security/advisories/GHSA-cgcm-4g72-hfgw. In 1.1.0 sanitize() no longer throws - input it cannot process safely, including a root element that is not <svg>, now returns false. Because upgrading changes sanitizer behavior, review the changelog before deploying: useThreshold() now counts every <use> a reference renders, so very large legitimate artwork such as halftone patterns with more than 1,000 nested copies can lose <use> elements (raise the limit if needed); when a <use> references a duplicated id the later elements lose their id; and attributes holding javascript:, vbscript: or non-image data: URLs are now stripped in every configuration. If upgrading immediately is not possible, wrap every Sanitizer::sanitize() call site in try/catch (\Throwable) and treat a thrown LogicException as a rejected file, and/or pre-check that the parsed document has exactly one document-level <svg> child before sanitizing; note that neither workaround fixes the underlying behavior change, so the catch block must also enforce the upload-rejection path, since a thrown exception where false was expected can otherwise skip rejection.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in 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 parses untrusted SVG markup with libxml and rewrites it through DOM/XPath traversal to strip script, remote references and other active content. The root-cause class is CWE-248 (Uncaught Exception): after loadXML() succeeds, Sanitizer::sanitize() (src/Sanitizer.php, around line 249) constructs new XPath($this->xmlDocument) with no try/catch, while XPath::handleDefaultNamespace() (src/data/XPath.php) counts the document's direct-child <svg> elements via getRootElements() and throws LogicException('Got %d svg elements, expected exactly one') whenever the count is not exactly one. Any document libxml accepts but that does not have a single document-level <svg> - a different root element, zero <svg> elements, or an <svg> nested inside e.g. <html><body> - therefore reaches the throw instead of the false return the library's contract promises; two top-level <svg> elements is malformed XML and correctly hits the false path. No authentication, user interaction, or non-default library configuration is involved: exposure depends entirely on the integrating application passing attacker-controlled markup to sanitize() while only checking for === false. The flaw is present in every release shipping this XPath check, confirmed from 0.11.0 up to 1.0.0 on master commit 6e2ed57, and is distinct from the other, separate advisories bundled into the 1.1.0 security release (GHSA-q546-85r6-f39q, GHSA-3vh3-jf65-656w, GHSA-vjg7-f2wj-gqqh, GHSA-94x8-pw3c-6qcq, GHSA-hrwm-vcc9-hcm4, GHSA-2v7c-jx29-jprp).
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Attacker-supplied input reaches the library remotely with no auth or interaction (AV:N/AC:L/PR:N/UI:N); only availability of the crashing worker is partially affected (A:L), no C/I impact, scope unchanged.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
Lifecycle Timeline
1DescriptionCVE.org
svg-sanitizer from 0.11.0 before 1.1.0 contains an uncaught exception vulnerability that allows attackers to crash callers by submitting well-formed XML without a top-level svg root. Attackers can supply documents with a non-svg root or nested svg element, causing Sanitizer::sanitize() to throw a LogicException instead of returning false, crashing workers or bypassing upload rejection.
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-110806
GHSA-82gx-99vw-x254
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB