Skip to main content

svg-sanitizer EUVDEUVD-2026-110806

| CVE-2026-117541 MEDIUM
Uncaught Exception (CWE-248)
2026-10-27 disclosure@vulncheck.com GHSA-82gx-99vw-x254
6.9
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach SVG upload/sanitize endpoint
  2. Exploit
    Craft well-formed XML with non-svg or nested-svg root
  3. Execution
    loadXML() succeeds, XPath construction throws LogicException
  4. Impact
    Uncaught 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

svg-sanitizer 0.11.0 <1.1.0

Affected Packages

euvd svg_sanitizer fix: 1.1.0

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

Vendor (vulncheck) PRIMARY 6.9 MEDIUM
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
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Oct 27, 2026 - 12:01 EUVD

DescriptionCVE.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

EPSS Score
0.3%
Top 76% exploitable
Prevalence
Medium
widely used PHP SVG-sanitizing library in CMS and upload pipelines
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

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

CVE-2012-1823 CRITICAL POC
9.8 May 11

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

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

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

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

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

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy