Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft SVG with obfuscated url() in presentation attribute
-
DeliverySubmit to app using dom-sanitizer ≤1.0.15
-
ExploitBypass incomplete-blacklist regex
-
ExecutionSanitized SVG served to victim
-
ImpactBrowser 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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
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
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
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.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
Lifecycle Timeline
2DescriptionCVE.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
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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-90850
GHSA-xpxw-4f4p-f3h2
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB