CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

CVE-2026-65898

highCVSS 7.2covered by 2 sourcesfirst seen 2026-06-18
Summary DOMPurify 3.4.7 shipped a security fix ("permanent hook pollution") that makes a registered uponSanitizeAttribute hook's mutation of data.allowedAttributes non-persistent — so allowing an attribute for one element does not leak into later sanitize() calls. The fix clones ALLOWED_ATTR inside _parseConfig. That guard is silently bypassed whenever the application uses the persistent-config API DOMPurify.setConfig(). setConfig() sets the module flag SET_CONFIG = true, which causes sanitize() to **skip _parseConfig entirely** — and the clone-guard lives inside _parseConfig. The hook is then handed the **live, shared ALLOWED_ATTR object; any data.allowedAttributes[name] = true it writes mutates that shared object permanently, for the lifetime of the DOMPurify instance, across every subsequent call, and across all elements. If an application uses setConfig() together with an uponSanitizeAttribute hook that conditionally allows a dangerous attribute (onerror, onclick, onmouseover, srcdoc, formaction, …) for "trusted" elements, then one trusted render permanently allows that attribute on untrusted, attacker-controlled content — yielding stored XSS in viewers' browsers. DOMPurify applies no separate /^on/ event-handler blocklist: attribute stripping is governed entirely by the allowlist, so a polluted allowlist is the only gate, and survival in the output is final. Affected configuration (preconditions) The vulnerability is triggered when an application does both: 1. Calls DOMPurify.setConfig(...) once (the recommended pattern for a fixed, persistent policy), and** 2. Registers an uponSanitizeAttribute hook that writes data.allowedAttributes[name] = true to conditionally allow an attribute (e.g. only for elements bearing a trust marker). This hook pattern is demonstrated in DOMPurify's own test suite, and the per-call variant of exactly this leak is what 3.4.7 was released to fix. Root cause (source: src/purify.ts, v3.4.10) The 3.4.7 clone-guard — only inside

⚡ Watch CVE-2026-65898

Get an email if CVE-2026-65898 is added to CISA KEV, gains public exploit code, or a new advisory cites it — max one per day, one-click unsubscribe.

Exploitation outlook

Advisory coverage (2)

External references

NVD record for CVE-2026-65898

CVE.org record

Embed the live status

CVE-2026-65898 live status badge — this badge updates automatically when the KEV or exploit status changes. How to embed it →

[![CVE-2026-65898 status](https://www.csirts.com/badge/CVE-2026-65898)](https://www.csirts.com/cve/CVE-2026-65898)