Skip to main content

rhukster dom-sanitizer CVE-2026-103687

| EUVDEUVD-2026-90850 MEDIUM
Incomplete List of Disallowed Inputs (CWE-184)
2026-10-01 VulDB GHSA-xpxw-4f4p-f3h2
5.5
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Craft SVG with obfuscated url() in presentation attribute
  2. Delivery
    Submit to app using dom-sanitizer ≤1.0.15
  3. Exploit
    Bypass incomplete-blacklist regex
  4. Execution
    Sanitized SVG served to victim
  5. Impact
    Browser decodes CSS and loads external reference

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation completeness
Exploitation Conditions

Exploitation requires an application that uses rhukster dom-sanitizer ≤1.0.15 to sanitize attacker-supplied SVG (DOMSanitizer::SVG mode, or HTML mode containing inline SVG), then serves that output to be rendered by a browser. The specific vectors are SVG presentation attributes carrying CSS url() values - fill, stroke, filter, clip-path, mask, marker-* - where a CSS comment (/**/) or hex escape (e.g. \2f\2f, \64 ata:) placed between url( and the scheme defeats the raw regex while the browser's CSS tokenizer still resolves the external reference. Limiting factors: the sanitizer output must actually be rendered client-side for impact to materialize, and same-document fragment references like url(#grad) and plain paint values are unaffected; no authentication or special privileges are needed to submit the malicious SVG.

Impact

This is a sanitizer-bypass flaw (CWE-184, incomplete blacklist) in the rhukster dom-sanitizer PHP library, not a direct code-execution bug. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:L, score 6.9) describes network-reachable, low-complexity, unauthenticated abuse with low confidentiality, integrity and availability impact - consistent with a filter that lets attacker-controlled SVG slip an external resource reference past sanitization. The E:P (Proof-of-Concept) exploit-maturity flag aligns with the public GHSA advisory and the committed regression tests, so a working bypass is documented. No EPSS score and no CISA KEV entry are provided, and there is no evidence of active exploitation - the signal is 'public exploit code exists' rather than 'exploited in the wild.' Net: a real, patch-now hygiene issue for anyone relying on this library to neutralize untrusted SVG, but the capped L/L/L impact and the requirement that the sanitized output actually be rendered in a victim browser keep it below critical. Reporter is VulDB; the authoritative source is the vendor's own GitHub security advisory and patch commit, which strengthens confidence in the technical details.

Exploit ScenarioDerived

An attacker submits an SVG containing a presentation attribute such as fill, stroke, mask, clip-path or filter whose url() value hides an external scheme behind a CSS comment or hex escape (e.g. fill="url(\2f\2f evil.example/x)" or url(/**/ //evil.example/x)). The raw regex blacklist fails to match the obfuscated value and passes it through, but the browser's CSS tokenizer decodes it and resolves the live external reference when the sanitized SVG is rendered. Public proof-of-concept vectors are documented in advisory GHSA-cjfg-j8jp-5xvc and the patch's regression tests.

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

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

Alert me

AnalysisAIv1 – Oct 01, 2026

Sanitizer bypass in rhukster dom-sanitizer up to and including 1.0.15 lets attackers smuggle external references through SVG presentation attributes that the library is supposed to neutralize, because the raw regex check can be defeated by CSS comments or hex escapes while a browser's CSS tokenizer still decodes the value into a live URL. The flaw is remote and requires no authentication or user privileges (CVSS 4.0 base 6.9; assessed CVSS 3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L), and it only produces impact in deployments that sanitize attacker-supplied SVG (DOMSanitizer::SVG mode, or HTML mode containing inline SVG) and then render that output in a browser. Publicly available exploit code exists and the vendor has released 1.0.16 as the fix; there is no indication of confirmed active exploitation (CISA KEV) at time of analysis, and EPSS-style risk is driven mainly by the low attack complexity and the availability of a public proof of concept.

RemediationAI

Upgrade rhukster dom-sanitizer to 1.0.16, which is the vendor-released fixed version; the change is applied by commit 139c46c3d7c9bc81542b7b5a58d5cde5d0e0195a and published under the release tag https://github.com/rhukster/dom-sanitizer/releases/tag/1.0.16, with the vendor advisory at https://github.com/rhukster/dom-sanitizer/security/advisories/GHSA-cjfg-j8jp-5xvc and the database entry at https://vuldb.com/vuln/412551. If you cannot upgrade immediately, backport the single-line change (normalize the url()-carrying presentation attribute value with the library's existing normalizeCss() routine before running the external-URL regex) rather than reimplementing the regex, since hand-rolled blacklists are exactly what failed here. Compensating controls, in order of preference: post-process sanitized output to strip or rewrite the url()-bearing SVG presentation attributes fill, stroke, filter, clip-path, mask and marker-* unless they contain only same-document fragments such as url(#grad) - the trade-off is loss of legitimate gradient/pattern filtering effects and possibly broken icons; block external subresource loading from sanitized markup by serving it under a strict Content-Security-Policy (for example img-src 'self' data:, style-src 'self', connect-src 'none') and from a sandboxed, cookie-less origin so a bypass cannot leak credentials or reach internal hosts - the trade-off is that CSP must be correct across all render paths and will not stop data: scheme abuse unless data: is also removed from img-src; and, as a last resort, disable SVG sanitization entirely and render user-supplied SVG as inert raster previews or plain text. Patching remains the only mitigation that removes the vulnerability rather than narrowing its blast radius, since the bypass requires no authentication and the proof-of-concept payloads are public.

Affected VersionsENISA

dom-sanitizer 1.0.8
dom-sanitizer 1.0.12
dom-sanitizer 1.0.7
dom-sanitizer 1.0.0
dom-sanitizer 1.0.3
dom-sanitizer 1.0.6
dom-sanitizer 1.0.4
dom-sanitizer 1.0.11
dom-sanitizer 1.0.2
dom-sanitizer 1.0.9
dom-sanitizer 1.0.13
dom-sanitizer 1.0.1
dom-sanitizer 1.0.15
dom-sanitizer 1.0.14
dom-sanitizer 1.0.5
dom-sanitizer 1.0.10

Affected Packages

euvd dom_sanitizer no fix

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

The affected component is a PHP HTML/SVG sanitization library on top of PHP's DOM extension; the vulnerable element is the url-handling logic in src/DOMSanitizer.php (the isExternalUrl-style check used for SVG presentation attributes), and the weakness class is CWE-184 (incomplete blacklist). SVG presentation attributes such as fill, stroke, filter, clip-path, mask and marker-* legitimately carry CSS url() values, so the library cannot simply drop them; instead it runs a regular expression (EXTERNAL_URL) over the raw attribute string to detect external schemes. That comparison is not equivalent to CSS tokenization: a CSS comment (for example url(// //evil.example/x) or url(htt//ps://evil.example/x)) or a hexadecimal escape (for example url(\2f\2f evil.example/x) for protocol-relative URLs, or url(\64 ata:image/svg+xml;base64,...) for a data: scheme) is decoded by the browser's CSS parser into a real external reference, but is invisible to a naive regex on the un-normalized string. The upstream fix applies the same normalizeCss() normalizer that the <style> and style-attribute paths already used, so every url()-carrying attribute is canonicalized before the external-URL check (commit 139c46c3d7c9bc81542b7b5a58d5cde5d0e0195a). Per the project's own regression tests, the bypass previously worked because the value was matched raw; benign same-document fragment references such as fill="url(#grad)" and plain paint values like fill="red" are unaffected and must continue to survive sanitization. Consistent with the independent assessment, this is a sanitizer-bypass flaw rather than a direct code-execution bug: the practical outcomes are constrained to low-scope confidentiality, integrity and availability effects that materialize only when the sanitized markup is actually rendered client-side.

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 (VulDB) PRIMARY 5.5 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:P
vuln.today AI 7.3 HIGH

Unauthenticated attacker submits malicious SVG remotely with low complexity (PR:N/AC:L); impact is capped at low external-reference injection/leak across C/I/A, matching the vendor's 4.0 L/L/L rating.

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

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

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

Lifecycle Timeline

2
CVSS changed
Oct 01, 2026 - 15:22 NVD
6.9 (MEDIUM) 5.5 (MEDIUM)
CVE Published
Oct 01, 2026 - 14:30 cve.org
MEDIUM 6.9

DescriptionCVE.org

A vulnerability has been found in rhukster dom-sanitizer up to 1.0.15. The affected element is the function url of the file src/DOMSanitizer.php of the component SVG Sanitization. Such manipulation leads to incomplete blacklist. It is possible to launch the attack remotely. The exploit has been disclosed to the public and may be used. Upgrading to version 1.0.16 is sufficient to fix this issue. The name of the patch is 139c46c3d7c9bc81542b7b5a58d5cde5d0e0195a. Upgrading the affected component is recommended.

Threat Intelligence Overview

EPSS Score
0.5%
Top 57% exploitable
Prevalence
Low
niche open-source PHP sanitization library, single-maintainer Composer package
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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 Yes
EPSS 0.5%
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
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

49
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +28
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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