Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft SVG with animate attributeName=href
-
DeliverySubmit to app sanitizing in XHTML mode
-
ExploitGuard skipped, payload survives sanitization
-
ExecutionVictim clicks the sanitized link
-
Impactjavascript: URI executes script in browser
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a specific non-default DOMPurify configuration: the integrating application must set PARSER_MEDIA_TYPE to 'application/xhtml+xml' AND allow the SVG animate (or set) element together with the attributeName attribute - e.g. ALLOWED_TAGS/ALLOWED_ATTR including 'animate' and 'attributeName', or USE_PROFILES:{svg:true} with ADD_TAGS:['animate'] and ADD_ATTR:['attributeName']. In XHTML mode transformCaseFunc is the identity function, so the case-sensitive XML name 'attributeName' never matches the lowercase 'attributename' guard and the href-stripping check is bypassed. Limiting factors: text/html (default) parser mode is not affected because the name is lowercased and stripped; the required camelCase allow-listing is non-default; and successful script execution needs user interaction (the victim must click the parent link whose href is rewritten to the javascript: value via SMIL fill="freeze"). The vendor notes updating is the fix and treats this as a hardening bug for non-default configs. |
| Impact | Signals point to a real but low-to-moderate priority issue rather than an urgent one. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N, score 5.1) shows a network-reachable, unauthenticated flaw with low complexity, but impact is confined to the subsequent system (the victim's browser) at low confidentiality/integrity and requires active user interaction - the victim must click the sanitized link. EPSS is low at 0.22% (12th percentile), the CVE is not listed in CISA KEV, and the vuln.today decision label is 'this_month' rather than act_now/emergency, all consistent with limited, non-urgent risk. A detailed, reporter-tested PoC is included in the GHSA advisory, which raises practical exploitability above what the low EPSS alone implies, but exploitation is gated on a non-default configuration (see exploitation_conditions) that the vendor itself classifies as a hardening bug, not a default-config bypass. Net: a genuine XSS worth patching on a normal cycle, not a drop-everything emergency; the main uplift in risk comes from the published PoC and the ease of the SMIL/javascript: technique, while the non-default XHTML config requirement and the required click sharply limit the exposed population. |
| Exploit ScenarioDerived | An application that runs DOMPurify in XHTML parser mode and allow-lists the SVG animate element plus the attributeName attribute accepts attacker-supplied markup. The attacker submits an SVG containing <a><animate attributeName="href" values="x;javascript:alert(1)" fill="freeze"/></a>; because the attributeName href guard is skipped in XHTML mode, the payload survives sanitization and is rendered to another user, who executes script in their browser by clicking the link. A reporter-tested proof-of-concept demonstrating this against DOMPurify 3.4.16 in Chrome is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Cross-site scripting in DOMPurify versions up to and including 3.4.16 lets an attacker slip a javascript: URL past the sanitizer's SMIL guard when the integrating application parses content with PARSER_MEDIA_TYPE set to 'application/xhtml+xml' and allowlists the SVG animate (or set) element together with the camelCase attributeName attribute. In that mode the guard that strips attributeName="href" never fires, so a sanitized SVG keeps an <animate> that rewrites its parent link's href, and a victim who clicks that link executes the injected script. Exploitation requires this non-default configuration plus user interaction, which is why the vendor classifies it as a hardening bug rather than a default-config bypass; EPSS is low at 0.22% (12th percentile), there is no CISA KEV listing, and a public proof-of-concept shipped with the advisory demonstrates the behavior in Chrome, with the vendor releasing 3.4.17 as the fix.
RemediationAI
Upgrade DOMPurify to 3.4.17, which the vendor released to close this gap (npm dompurify 3.4.17; upstream fix in pull request 1672 and commit a77a3e78b59f72fa4d1c83f22e121ad9cc7d3575, documented at https://github.com/cure53/DOMPurify/security/advisories/GHSA-c6gr-qvv4-5v3f), and treat updating as the complete fix per the vendor. Applications that cannot upgrade immediately can eliminate exposure by removing the preconditions: stop setting PARSER_MEDIA_TYPE to 'application/xhtml+xml' and stay on the default text/html parser mode, where the attribute name is lowercased and attributeName is stripped - the trade-off is that XHTML consumers must accept HTML parsing semantics for sanitized markup; or keep XHTML mode but drop 'animate'/'set' and 'attributeName' from ALLOWED_TAGS/ALLOWED_ATTR (and from USE_PROFILES svg configurations via ADD_TAGS/ADD_ATTR), at the cost of losing SMIL animation support in sanitized SVG content. Prioritization is moderate: EPSS is 0.22% and there is no CISA KEV entry, and the vuln.today decision label places remediation within this month rather than as an emergency.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
DOMPurify is a widely deployed client-side HTML/SVG sanitizer whose attribute scrubbing routine, _sanitizeAttributes, normalizes each attribute name through transformCaseFunc before running allow/deny comparisons. That function is stringToLowerCase in the default text/html parser mode, but becomes the identity function in application/xhtml+xml mode because XML names are case-sensitive, so the real SVG spelling 'attributeName' is preserved. The guard that removes attributeName values containing 'href' compares against the lowercase literal "attributename" and therefore never matches in XHTML mode, a case-sensitivity defect in the CWE-79 cross-site scripting class closely related to earlier XHTML case-handling hardening in 3.4.14/3.4.15. A second weakness compounds it: the URI allowlist check (IS_ALLOWED_URI) only inspects the start of the value, so 'x;javascript:alert(1)' reads as a relative value even though SMIL treats values as a semicolon-delimited list and, combined with fill="freeze", makes the final entry the effective href of the parent anchor. Users of XHTML mode must list SVG attributes in camelCase, so ALLOWED_ATTR/ADD_ATTR entries such as 'attributeName' are the natural config in which the bypass arises; text/html mode lowercases the name and strips it correctly.
Know when Dompurify 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:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Unauthenticated attacker supplies markup (PR:N, AV:N, AC:L), victim must click (UI:R), and script runs in the browser beyond the sanitizer component (S:C) with low C/I and no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
DOMPurify before 3.4.17 contains a cross-site scripting vulnerability that allows attackers to bypass the SMIL attributeName=href guard when PARSER_MEDIA_TYPE is application/xhtml+xml, because transformCaseFunc does not lowercase attribute names. Attackers can submit SVG with an animate or set element using attributeName="href" and a javascript: entry in values to execute script when users click the sanitized link.
Blast Radius
ecosystem impact- 16,332 npm packages depend on dompurify (3,926 direct, 12,648 indirect)
Ecosystem-wide dependent count for version 3.4.17.
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. Rated medium severity (CVSS 6
Cure53 DOMPurify before 2.0.17 allows mutation XSS. Rated medium severity (CVSS 6.1), this vulnerability is remotely exp
DOMPurify before 2.0.1 allows XSS because of innerHTML mutation XSS (mXSS) for an SVG element or a MATH element, as demo
DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. Rated critical severity (CVSS
Mutation-XSS in DOMPurify before 3.3.2 enables JavaScript execution in victim browsers when sanitized output is re-inser
Hook mutation pollution in DOMPurify <= 3.4.5 allows persistent bypass of HTML sanitization defaults when application-in
Trusted Types policy state contamination in DOMPurify 3.0.0-3.4.8 allows a previously supplied TRUSTED_TYPES_POLICY to s
Prototype pollution in DOMPurify's USE_PROFILES mode enables DOM-based XSS by causing the sanitizer to accept event hand
URI validation bypass in DOMPurify 3.3.1 and earlier allows `javascript:` protocol payloads to survive HTML sanitization
SAFE_FOR_TEMPLATES bypass in DOMPurify 3.0.0-3.4.7 allows template expressions such as ${evil}, {{evil}}, and <%evil%> t
Cross-site scripting in DOMPurify 3.4.6 and earlier enables script execution when the library's IN_PLACE sanitization mo
Stored XSS is achievable in applications using DOMPurify's setConfig() API combined with an uponSanitizeAttribute hook t
EUVD-2026-110510
GHSA-g32m-chc6-3wqf
NVD
CVE.org
EPSS
Exploit-DB