{"id":"CVE-2026-65900","aliases":["GHSA-gvmj-g25r-r7wr"],"url":"https://o3.security/vulnerability/CVE-2026-65900","summary":"DOMPurify before 3.4.8 Template Expression Injection via RETURN_DOM","details":"DOMPurify versions >=3.0.0 and before 3.4.8, when configured with SAFE_FOR_TEMPLATES together with a DOM output mode (RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE), fail to strip template expressions (e.g. ${evil}, {{evil}}, <%evil%>) inside <template> element content. The final normalization/scrub pass (_scrubTemplateExpressions) uses a NodeIterator and node.normalize() that do not descend into template.content, so expressions that only form after adjacent text nodes merge survive sanitization. This bypasses SAFE_FOR_TEMPLATES and can allow a downstream template engine to evaluate attacker-supplied expressions. The string output path is not affected.","published":"2026-07-23T13:16:19.045Z","modified":"2026-08-12T03:51:16.606940451Z","cvss":null,"epss":{"score":0.00209,"percentile":0.10981,"asOf":"2026-09-01"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"npm","name":"dompurify","fixedVersion":"3.4.8"}],"fix":null,"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/65xxx/CVE-2026-65900.json"},{"type":"ADVISORY","url":"https://github.com/cure53/DOMPurify/security/advisories/GHSA-gvmj-g25r-r7wr"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-65900"},{"type":"ADVISORY","url":"https://www.vulncheck.com/advisories/dompurify-before-template-expression-injection-via-return-dom"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-08-12T03:51:16.606940451Z"}}