fix(deps): update dependency dompurify to v3.3.2 [security]#38
fix(deps): update dependency dompurify to v3.3.2 [security]#38renovate[bot] wants to merge 1 commit into
Conversation
Reviewer's Guide by SourceryThis pull request updates the No diagrams generated as the changes look simple and do not need a visual representation. File-Level Changes
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the
Comment |
CI Feedback 🧐A test triggered by this PR failed. Here is an AI-generated analysis of the failure:
|
f2ddc97 to
ee1c5e2
Compare
ee1c5e2 to
38e0e1d
Compare
38e0e1d to
89af424
Compare
89af424 to
d8d2498
Compare
d8d2498 to
98ca4b0
Compare
98ca4b0 to
2c6a680
Compare
This PR contains the following updates:
3.1.7→3.3.2Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
DOMPurify allows Cross-site Scripting (XSS)
CVE-2025-26791 / GHSA-vhxf-7vqr-mrjg
More information
Details
DOMPurify before 3.2.4 has an incorrect template literal regular expression when SAFE_FOR_TEMPLATES is set to true, sometimes leading to mutation cross-site scripting (mXSS).
Severity
CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
DOMPurify contains a Cross-site Scripting vulnerability
CVE-2025-15599 / GHSA-v8jm-5vwx-cfxm
More information
Details
DOMPurify 3.1.3 through 3.2.6 and 2.5.3 through 2.5.8 contain a cross-site scripting vulnerability that allows attackers to bypass attribute sanitization by exploiting missing textarea rawtext element validation in the SAFE_FOR_XML regex. Attackers can include closing rawtext tags like </textarea> in attribute values to break out of rawtext contexts and execute JavaScript when sanitized output is placed inside rawtext elements. The 3.x branch was fixed in 3.2.7; the 2.x branch was never patched.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
DOMPurify contains a Cross-site Scripting vulnerability
CVE-2026-0540 / GHSA-v2wj-7wpq-c8vv
More information
Details
DOMPurify 3.1.3 through 3.3.1 and 2.5.3 through 2.5.8, fixed in 2.5.9 and 3.3.2, contain a cross-site scripting vulnerability that allows attackers to bypass attribute sanitization by exploiting five missing rawtext elements (noscript, xmp, noembed, noframes, iframe) in the
SAFE_FOR_XMLregex. Attackers can include payloads like</noscript><img src=x onerror=alert(1)>in attribute values to execute JavaScript when sanitized output is placed inside these unprotected rawtext contexts.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
DOMPurify is vulnerable to mutation-XSS via Re-Contextualization
GHSA-h8r8-wccr-v5f2
More information
Details
Description
A mutation-XSS (mXSS) condition was confirmed when sanitized HTML is reinserted into a new parsing context using
innerHTMLand special wrappers. The vulnerable wrappers confirmed in browser behavior arescript,xmp,iframe,noembed,noframes, andnoscript. The payload remains seemingly benign afterDOMPurify.sanitize(), but mutates during the second parse into executable markup with an event handler, enabling JavaScript execution in the client (alert(1)in the PoC).Vulnerability
The root cause is context switching after sanitization: sanitized output is treated as trusted and concatenated into a wrapper string (for example,
<xmp> ... </xmp>or other special wrappers) before being reparsed by the browser. In this flow, attacker-controlled text inside an attribute (for example</xmp>or equivalent closing sequences for each wrapper) closes the special parsing context early and reintroduces attacker markup (<img ... onerror=...>) outside the original attribute context. DOMPurify sanitizes the original parse tree, but the application performs a second parse in a different context, reactivating dangerous tokens (classic mXSS pattern).PoC
http://localhost:3001.Wrapper en sinktoxmp.Sanitize + Render.Sanitized responsestill contains the</xmp>sequence insidealt.<img src="x" onerror="alert('expoc')">.alert('expoc')is triggered.{ "name": "expoc", "version": "1.0.0", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node server.js", "dev": "node server.js" }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { "dompurify": "^3.3.1", "express": "^5.2.1", "jsdom": "^28.1.0" } }Evidence
daft-video.webm
Why This Happens
This is a mutation-XSS pattern caused by a parse-context mismatch:
xmpraw-text behavior).</xmp>) gains structural meaning in parse 2 and alters DOM structure.Sanitization is not a universal guarantee across all future parsing contexts. The sink design reintroduces risk.
Remediation Guidance
innerHTML.textContent,createElement,setAttribute) over string-based HTML composition.xmp,script, etc.).</xmp>,</noscript>, similar parser-breakout markers).Reported by Oscar Uribe, Security Researcher at Fluid Attacks. Camilo Vera and Cristian Vargas from the Fluid Attacks Research Team have identified a mXSS via Re-Contextualization in DomPurify 3.3.1.
Following Fluid Attacks Disclosure Policy, if this report corresponds to a vulnerability and the conditions outlined in the policy are met, this advisory will be published on the website over the next few days (the timeline may vary depending on maintainers' willingness to attend to and respond to this report) at the following URL: https://fluidattacks.com/advisories/daft
Acknowledgements: Camilo Vera and Cristian Vargas.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
DOMPurify USE_PROFILES prototype pollution allows event handlers
GHSA-cj63-jhhr-wcxv
More information
Details
Summary
When
USE_PROFILESis enabled, DOMPurify rebuildsALLOWED_ATTRas a plain array before populating it with the requested allowlists. Because the sanitizer still looks up attributes viaALLOWED_ATTR[lcName], anyArray.prototypeproperty that is polluted also counts as an allowlisted attribute. An attacker who can setArray.prototype.onclick = true(or a runtime already subject to prototype pollution) can thus force DOMPurify to keep event handlers such asonclickeven when they are normally forbidden. The provided PoC sanitizes<img onclick=...>withUSE_PROFILESand adds the sanitized output to the DOM; the polluted prototype allows the event handler to survive and execute, turning what should be a blocklist into a silent XSS vector.Impact
Prototype pollution makes DOMPurify accept dangerous event handler attributes, which bypasses the sanitizer and results in DOM-based XSS once the sanitized markup is rendered.
Credits
Identified by Cantina’s Apex (https://www.cantina.security).
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
DOMPurify ADD_ATTR predicate skips URI validation
GHSA-cjmm-f4jc-qw8r
More information
Details
Summary
DOMPurify allows
ADD_ATTRto be provided as a predicate function viaEXTRA_ELEMENT_HANDLING.attributeCheck. When the predicate returnstrue,_isValidAttributeshort-circuits the attribute check before URI-safe validation runs. An attacker who supplies a predicate that accepts specific attribute/tag combinations can then sanitize input such as<a href="javascript:alert(document.domain)">and have thejavascript:URL survive, because URI validation is skipped for that attribute while other checks still pass. The provided PoC acceptshreffor anchors and then triggers a click inside an iframe, showing that the sanitized payload executes despite the protocol bypass.Impact
Predicate-based allowlisting bypasses DOMPurify's URI validation, allowing unsafe protocols such as
javascript:to reach the DOM and execute whenever the link is activated, resulting in DOM-based XSS.Credits
Identified by Cantina’s Apex (https://www.cantina.security).
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
cure53/DOMPurify (dompurify)
v3.3.2: DOMPurify 3.3.2Compare Source
_isValidAttribute, thanks @christos-ethv3.3.1: DOMPurify 3.3.1Compare Source
ADD_FORBID_CONTENTSsetting to extend default list, thanks @MariusRumpfv3.3.0: DOMPurify 3.3.0Compare Source
mask-typeattribute to default allow-list, thanks @prasadrajandranADD_ATTRandADD_TAGSto accept functions, thanks @nelstromslotelement being in both SVG and HTML allow-list, thanks @Wim-Valgaerenv3.2.7: DOMPurify 3.2.7Compare Source
tagNameparameter to custom elementattributeNameCheck, thanks @nelstromhrefattributes, thanks @llamakkov3.2.6: DOMPurify 3.2.6Compare Source
matrix:as an allowed URI scheme, thanks @kleinesfilmroellchenv3.2.5: DOMPurify 3.2.5Compare Source
ALLOWED_URI_REGEXPusing the 'g' flag, thanks @hhk-pngv3.2.4: DOMPurify 3.2.4Compare Source
v3.2.3: DOMPurify 3.2.3Compare Source
v3.2.2: DOMPurify 3.2.2Compare Source
v3.2.1: DOMPurify 3.2.1Compare Source
v3.2.0: DOMPurify 3.2.0Compare Source
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.