Skip to main content

svg-sanitizer EUVDEUVD-2026-95136

| CVE-2026-107379 MEDIUM
Allocation of Resources Without Limits or Throttling (CWE-770)
2026-10-08 security-advisories@github.com GHSA-v383-3rw5-q8rf
6.5
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Access SVG sanitization/upload endpoint
  2. Delivery
    Submit crafted SVG with #FIXED DTD default
  3. Exploit
    Trigger double removeAttribute() in cleanAttributesOnWhitelist()
  4. Execution
    Corrupt libxml state, terminate PHP worker
  5. Impact
    Repeat 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.

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

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

Alert me

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

svg-sanitizer < 1.0.0

Affected Packages

composer enshrined/svg-sanitize fix: 1.0.0
euvd svg_sanitizer fix: 1.0.0

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

Vendor (github) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 6.5 MEDIUM

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.

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

1
Patch available
Oct 08, 2026 - 19:18 EUVD

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

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Medium
popular standalone PHP SVG sanitizer embedded in many CMS/upload pipelines
Threat Intel
1
1 source
Data Quality
4 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.4%
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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
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