PT-2026-49558 · Root+5 · @Rootio/Dompurify+3

CVE-2026-49459

·

Published

2026-06-15

·

Updated

2026-08-31

CVSS v3.1

6.1

Medium

VectorAV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Name of the Vulnerable Software and Affected Versions DOMPurify versions prior to 3.4.6
Description When using DOMPurify.sanitize(root, { IN PLACE: true }) with a <form> element as the root, an attacker can bypass attribute sanitization. This occurs if a descendant element has a name attribute that clobbers properties checked by the isClobbered() function (such as nodeName, setAttribute, namespaceURI, insertBefore, hasChildNodes, childNodes, attributes, textContent, removeChild, or removeAttribute).
The bypass happens because the forceRemove() function fails to remove the root node when it has no parent, and the sanitizeAttributes() function early-returns when it detects a clobbered node, assuming it has already been removed. This allows event-handler attributes (e.g., onmouseover, onclick), javascript: URIs in action or formaction attributes, and DOM-clobbering id attributes to persist on the root element. Additionally, this bypass affects the SAFE FOR TEMPLATES configuration, allowing raw template syntax to survive in the root's attributes.
Recommendations Update DOMPurify to version 3.4.6 or later. As a temporary workaround, avoid using the IN PLACE: true option when the root node is constructed from untrusted HTML.

Exploit

Fix

XSS

Protection Mechanism Failure

Prototype Pollution

Found an issue in the description? Have something to add? Feel free to write us 👾

Weakness Enumeration

Related Identifiers

CVE-2026-49459
GHSA-R47G-FVHR-H676

Affected Products

@Rootio/Dompurify
Dompurify
Dompurify.Js
Node-Dompurify