{"id":"CVE-2026-65902","revision":"666bebbbd77649aeabd6ec03d9a07e5f","records":[{"revision":"666bebbbd77649aeabd6ec03d9a07e5f","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-65902","aliases":[],"title":"DOMPurify before 3.4.7 Hook Mutation Pollution via allowedTags","description":"DOMPurify before 3.4.7 (affected versions <= 3.4.5) passes direct references to the module-level DEFAULT_ALLOWED_TAGS and DEFAULT_ALLOWED_ATTR sets to the uponSanitizeElement and uponSanitizeAttribute hooks via data.allowedTags / data.allowedAttributes when sanitize is called without an explicit cfg.ALLOWED_TAGS / cfg.ALLOWED_ATTR array. A hook that mutates these fields permanently widens the default allow-lists for the lifetime of the DOMPurify instance, so all subsequent default-config sanitize calls inherit the widened defaults and attacker payloads using the poisoned tag/attribute name survive sanitization. removeAllHooks(), clearConfig(), and passing a fresh cfg do not recover the state; only constructing a new DOMPurify instance does.","state":0,"publishedAt":"2026-07-23T13:16:20.528+00:00","modifiedAt":"2026-07-24T21:35:25.085+00:00","affected":[{"ecosystem":"Vendor product","name":"DOMPurify","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"cure53\",\n                    \"product\": \"DOMPurify\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"packageURL\": \"pkg:npm/dompurify\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"3.4.7\"\n                        },\n                        {\n                            \"version\": \"3.4.7\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N","score":5.3,"severity":"MEDIUM"},{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","score":6.1,"severity":"MEDIUM"}],"references":["https://github.com/cure53/DOMPurify/security/advisories/GHSA-76mc-f452-cxcm","https://github.com/cure53/DOMPurify/commit/7996f1dc78eb8b7922388aed75d94a9f8fad9a36","https://www.vulncheck.com/advisories/dompurify-before-hook-mutation-pollution-via-allowedtags"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-65902","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-65902","identifiers":["CVE-2026-65902"]},"retained":false,"historicalAffected":[]}],"coverage":[]}