Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify USE_PROFILES DOMPurify usage in target app
-
DeliveryExploit separate prototype pollution gadget in runtime
-
ExploitSet Array.prototype.onclick = true
-
InstallSubmit crafted HTML to sanitized input
-
C2DOMPurify preserves onclick attribute in output
-
ExecuteVictim renders sanitized markup
-
ImpactUser interaction triggers XSS payload
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V3 - Web Frontend Security Prototype pollution prevention
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two conditions must hold simultaneously for exploitation to succeed. First, the application must invoke DOMPurify with the USE_PROFILES option explicitly set - the vulnerability does not exist in default DOMPurify mode. Second, Array.prototype must be pollutable within the same JavaScript runtime, either through a separate prototype pollution vulnerability in the application stack (e.g., an unsafe lodash merge, qs parser misconfiguration, or similar gadget) or because the runtime is already in a polluted state from another vector. Active user interaction is required to trigger the XSS payload, specifically an action that fires the injected event handler (e.g., clicking on an element with onclick). Authentication and network-level access requirements are not constrained by this vulnerability itself - they depend entirely on how the application exposes the DOMPurify-processed input surface. Exploitation is limited in the common case where USE_PROFILES is not used or where the application stack contains no prototype pollution vectors. |
| Impact | The vendor-assigned CVSS 4.0 score of 5.1 (Medium, vector AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N) reflects network reachability, no required privileges, active user interaction to fire the event handler, and a moderate subsequent-system impact consistent with DOM XSS. The AC:L metric is optimistic given the real-world prerequisite: exploiting this flaw requires a prototype pollution capability to already exist in the same JavaScript runtime, either through a separate vulnerability in the application (e.g., a polluted Object.prototype via lodash merge or qs parser) or a runtime already in a polluted state. This is a non-trivial chaining requirement that the CVSS base score does not penalize. No EPSS data was provided, so probability cannot be quantitatively stated. No CISA KEV listing has been identified, consistent with no confirmed mass exploitation. The public proof-of-concept included in the advisory meaningfully lowers the exploitation bar for attackers who have already identified a suitable prototype pollution gadget in a target application. Real-world priority is elevated for applications that use both USE_PROFILES mode and any library with known prototype pollution exposure, and low for applications using DOMPurify in default mode. |
| Exploit ScenarioDerived | An attacker identifies a prototype pollution gadget in the target application - for example, a vulnerable JSON merge utility or query string parser - and uses attacker-controlled input to set Array.prototype.onclick = true in the victim's browser runtime. When the application subsequently sanitizes attacker-supplied HTML using DOMPurify with USE_PROFILES enabled, the onclick attribute on an injected element such as img survives sanitization; when the victim renders and interacts with the output, the injected handler executes arbitrary JavaScript in their session. A proof-of-concept demonstrating this exact chain is included in GHSA-cj63-jhhr-wcxv. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 23, 2026
Prototype pollution in DOMPurify's USE_PROFILES mode enables DOM-based XSS by causing the sanitizer to accept event handler attributes it should block. Versions up to and including 3.3.1 of the npm package rebuild ALLOWED_ATTR as a plain JavaScript array when USE_PROFILES is active, making attribute allowlist lookups traverse the prototype chain - so a polluted Array.prototype (e.g., Array.prototype.onclick = true) causes DOMPurify to silently pass through event handlers like onclick into sanitized output. A proof-of-concept is included in the vendor advisory GHSA-cj63-jhhr-wcxv; no CISA KEV listing has been identified, indicating no confirmed active exploitation at time of analysis.
RemediationAI
Upgrade DOMPurify to version 3.3.2 or later, which is the vendor-released patch confirmed by GHSA-cj63-jhhr-wcxv. If an immediate upgrade is not feasible, the most targeted workaround is to stop using USE_PROFILES mode and instead manually configure ALLOWED_TAGS and ALLOWED_ATTR as explicit sets - this eliminates the array-rebuild code path that introduces the polluted-prototype lookup. Note that this workaround requires careful manual allowlist maintenance to avoid regressing sanitization coverage. Additionally, audit the full application dependency tree for prototype pollution sources (e.g., lodash < 4.17.21, qs < 6.10.3, query-string with object parsing enabled) and remediate those independently, since this vulnerability is most dangerous when chained with a pollution entry point elsewhere. Relying solely on removing USE_PROFILES is insufficient if prototype pollution is achievable through other application vectors. Advisory references: https://github.com/cure53/DOMPurify/security/advisories/GHSA-cj63-jhhr-wcxv.
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 (CPE: cpe:2.3:a:cure53:dompurify:*:*:*:*:*:*:*:*) is a widely-used client-side HTML sanitizer distributed as an npm package by cure53. CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes - Prototype Pollution) captures the root cause: when USE_PROFILES mode is enabled, DOMPurify discards its existing ALLOWED_ATTR set and reconstructs it as a plain JavaScript Array before populating it with the requested allowlists. Attribute filtering then uses property-style lookups on that array (ALLOWED_ATTR[lcName]), which in JavaScript traverses the prototype chain. Any property pre-set on Array.prototype - such as Array.prototype.onclick = true - therefore evaluates as truthy, making DOMPurify treat that event handler as an allowlisted attribute. This is a logic bypass rooted in JavaScript's prototype inheritance model, not a memory-safety defect. The vulnerability is confined to the USE_PROFILES code path; the default DOMPurify configuration is not affected.
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
AC:H reflects the non-trivial prerequisite of a chained prototype pollution capability; UI:R for required user interaction to fire the event handler; S:C for DOM XSS scope change into victim browser session.
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
DOMPurify before 3.3.2 contains a prototype pollution vulnerability in USE_PROFILES mode that allows attackers to bypass attribute filtering by polluting Array.prototype properties. Attackers can set Array.prototype properties like onclick to true, causing DOMPurify to accept event handlers as allowlisted attributes and resulting in DOM-based XSS when sanitized markup is rendered.
Blast Radius
ecosystem impact- 287 npm packages depend on dompurify (25 direct, 262 indirect)
Ecosystem-wide dependent count for version 3.3.2.
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
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
DOMPurify before 3.2.4 has an incorrect template literal regular expression, sometimes leading to mutation cross-site sc
Vendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Linux Enterprise Module for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| openSUSE Leap 16.0 | Affected |
| openSUSE Leap 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Affected |
| SUSE Linux Enterprise Module for SAP Applications 15 SP3 | Affected |
| SUSE Linux Enterprise Module for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Module for SAP Applications 15 SP5 | Affected |
| SUSE Linux Enterprise Module for SAP Applications 15 SP6 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP3 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
EUVD-2026-48276
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB