CVE-2026-116804
DOMPurify from 3.4.4 before 3.4.17 SAFE_FOR_TEMPLATES Bypass via Shadow Root Content
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Active
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
5.1
DOMPurify from 3.4.4 before 3.4.17 SAFE_FOR_TEMPLATES Bypass via Shadow Root Content
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
- Record
CVE-2026-116804- CVSS 4.0
- 5.1 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2026-110512
5.1
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
- Record
EUVD-2026-110512- CVSS 4.0
- 5.1 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-6vxf-252m-8g79
5.1
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers...
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
- Record
GHSA-6vxf-252m-8g79- CVSS 4.0
- 5.1 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-cg2g-xh64-v4q7
9.2
DOMPurify SAFE_FOR_TEMPLATES bypass: split template expressions survive in attached shadow root content on DOM output modes
Summary
When DOMPurify is configured with SAFE_FOR_TEMPLATES: true together with a DOM-returning mode (RETURN_DOM: true, RETURN_DOM_FRAGMENT: true, or IN_PLACE: true), template expressions such as {{...}}, ${...}, and <%...%> survive sanitization inside the text content of an attached shadow root. The post-walk safety net _scrubTemplateExpressions (src/purify.ts:1717) was extended to recurse into <template>.content, but it never recurses into attached shadow roots. An attacker who can supply a DOM node carrying a shadow root (the IN_PLACE and shadow-aware RETURN_DOM surfaces) can split an expression across text nodes separated by disallowed elements; after those elements are removed the fragments become adjacent and serialize into a complete expression that a downstream template engine will evaluate.
Root Cause
SAFE_FOR_TEMPLATES neutralizes template expressions through two mechanisms: a per-text-node strip during the main walk (_stripTemplateExpressions, applied in _sanitizeElements at src/purify.ts:2246), and a final post-walk pass (_scrubTemplateExpressions, src/purify.ts:1717) that normalizes adjacent text nodes and re-strips expressions that only form after merging. The per-node strip cannot catch an expression that is split into individual fragments, because each fragment fails the delimiter regexes. The post-walk pass is the only mechanism that would catch the merged form, but it is structurally unable to reach shadow root content.
_scrubTemplateExpressions (src/purify.ts:1717-1751):
- node.normalize() at line 1718 does not merge text nodes inside shadow roots (DOM spec).
- NodeIterator at lines 1723-1731 does not descend into shadow trees (DOM spec).
- Explicit recursion at lines 1743-1750 enters <template>.content only, via
querySelectorAll('template'); there is no equivalent recursion into attached
shadow roots.
Shadow roots are sanitized earlier by _sanitizeShadowDOM (src/purify.ts:2710), which
applies the per-node strip but never performs the post-walk normalize-and-rescrub.
Shadow root text nodes are therefore sanitized only per-node and never re-examined as a merged unit.
Impact
An attacker who controls DOM-node input containing an attached shadow root can inject template expressions that survive sanitization and are later evaluated by the application's template engine. In client-side contexts this yields cross-site scripting; in a server-side template context it can escalate to template injection. Exploitation requires non-default application configuration: the application must enable SAFE_FOR_TEMPLATES and a DOM-returning mode, pass a DOM node that already has an attached shadow root, and feed the sanitized shadow root content into a template evaluator. The shadow root does not have to be built programmatically with attachShadow: in engines that support declarative shadow DOM, attacker-supplied markup containing <template shadowrootmode="open"> parsed through setHTMLUnsafe or Document.parseHTMLUnsafe produces the same attached shadow root, so a plain HTML string reaches the gap once the application is configured this way. Demonstrated capability is injection of a complete, attacker-chosen expression into post-sanitization shadow root content; the resulting script execution and any confidentiality or integrity consequence depend on the downstream engine's evaluation context.
Proof of Concept
Preconditions:
- DOMPurify built from the affected source (dist/purify.js or an ESM/CJS bundle).
- A browser (or DOM implementation) with shadow DOM support.
- Application constructs a DOM node with an attached shadow root before sanitizing,
and later evaluates the shadow root's text content as a template.
Build a host element whose shadow root holds a template expression split across text nodes separated by disallowed elements, then sanitize in place with SAFE_FOR_TEMPLATES:
const host =…
- Record
GHSA-cg2g-xh64-v4q7- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-79
- Updated
- 2026-11-02
NVD
5.1
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
- Record
CVE-2026-116804- CVSS 4.0
- 5.1 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-03
OSV
5.1
DOMPurify from 3.4.4 before 3.4.17 SAFE_FOR_TEMPLATES Bypass via Shadow Root Content
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
- Record
CVE-2026-116804- CVSS 4.0
- 5.1 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N - Weakness
- CWE-79
- Updated
- 2026-11-04
Show 24 moreShow less
OSVDEBIAN-CVE-2026-116804
5.1
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
- Record
DEBIAN-CVE-2026-116804- CVSS 4.0
- 5.1 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-03
OSVGHSA-cg2g-xh64-v4q7
9.2
DOMPurify SAFE_FOR_TEMPLATES bypass: split template expressions survive in attached shadow root content on DOM output modes
Summary
When DOMPurify is configured with SAFE_FOR_TEMPLATES: true together with a DOM-returning mode (RETURN_DOM: true, RETURN_DOM_FRAGMENT: true, or IN_PLACE: true), template expressions such as {{...}}, ${...}, and <%...%> survive sanitization inside the text content of an attached shadow root. The post-walk safety net _scrubTemplateExpressions (src/purify.ts:1717) was extended to recurse into <template>.content, but it never recurses into attached shadow roots. An attacker who can supply a DOM node carrying a shadow root (the IN_PLACE and shadow-aware RETURN_DOM surfaces) can split an expression across text nodes separated by disallowed elements; after those elements are removed the fragments become adjacent and serialize into a complete expression that a downstream template engine will evaluate.
Root Cause
SAFE_FOR_TEMPLATES neutralizes template expressions through two mechanisms: a per-text-node strip during the main walk (_stripTemplateExpressions, applied in _sanitizeElements at src/purify.ts:2246), and a final post-walk pass (_scrubTemplateExpressions, src/purify.ts:1717) that normalizes adjacent text nodes and re-strips expressions that only form after merging. The per-node strip cannot catch an expression that is split into individual fragments, because each fragment fails the delimiter regexes. The post-walk pass is the only mechanism that would catch the merged form, but it is structurally unable to reach shadow root content.
_scrubTemplateExpressions (src/purify.ts:1717-1751):
- node.normalize() at line 1718 does not merge text nodes inside shadow roots (DOM spec).
- NodeIterator at lines 1723-1731 does not descend into shadow trees (DOM spec).
- Explicit recursion at lines 1743-1750 enters <template>.content only, via
querySelectorAll('template'); there is no equivalent recursion into attached
shadow roots.
Shadow roots are sanitized earlier by _sanitizeShadowDOM (src/purify.ts:2710), which
applies the per-node strip but never performs the post-walk normalize-and-rescrub.
Shadow root text nodes are therefore sanitized only per-node and never re-examined as a merged unit.
Impact
An attacker who controls DOM-node input containing an attached shadow root can inject template expressions that survive sanitization and are later evaluated by the application's template engine. In client-side contexts this yields cross-site scripting; in a server-side template context it can escalate to template injection. Exploitation requires non-default application configuration: the application must enable SAFE_FOR_TEMPLATES and a DOM-returning mode, pass a DOM node that already has an attached shadow root, and feed the sanitized shadow root content into a template evaluator. The shadow root does not have to be built programmatically with attachShadow: in engines that support declarative shadow DOM, attacker-supplied markup containing <template shadowrootmode="open"> parsed through setHTMLUnsafe or Document.parseHTMLUnsafe produces the same attached shadow root, so a plain HTML string reaches the gap once the application is configured this way. Demonstrated capability is injection of a complete, attacker-chosen expression into post-sanitization shadow root content; the resulting script execution and any confidentiality or integrity consequence depend on the downstream engine's evaluation context.
Proof of Concept
Preconditions:
- DOMPurify built from the affected source (dist/purify.js or an ESM/CJS bundle).
- A browser (or DOM implementation) with shadow DOM support.
- Application constructs a DOM node with an attached shadow root before sanitizing,
and later evaluates the shadow root's text content as a template.
Build a host element whose shadow root holds a template expression split across text nodes separated by disallowed elements, then sanitize in place with SAFE_FOR_TEMPLATES:
const host =…
- Record
GHSA-cg2g-xh64-v4q7- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-116804
5.1
DOMPurify from 3.4.4 before 3.4.17 contains a SAFE_FOR_TEMPLATES bypass that lets attackers preserve template expressions in attached shadow roots when using RETURN_DOM, RETURN_DOM_FRAGMENT, or IN_PLACE modes. Attackers can split expressions across text nodes separated by disallowed elements, which merge after removal and are evaluated by downstream template engines for cross-site scripting.
- Record
UBUNTU-CVE-2026-116804- CVSS 4.0
- 5.1 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Updated
- 2026-11-02
OSVCLSA-2026-1793100794 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.5-tuxcare.5.
- Record
CLSA-2026-1793100794- Updated
- 2026-11-02
OSVCLSA-2026-1793100979 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.8-tuxcare.7.
- Record
CLSA-2026-1793100979- Updated
- 2026-11-02
OSVCLSA-2026-1793101079 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.13-tuxcare.3.
- Record
CLSA-2026-1793101079- Updated
- 2026-11-02
OSVCLSA-2026-1793101206 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.11-tuxcare.5.
- Record
CLSA-2026-1793101206- Updated
- 2026-11-02
OSVCLSA-2026-1793101291 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.6-tuxcare.5.
- Record
CLSA-2026-1793101291- Updated
- 2026-11-02
OSVCLSA-2026-1793101437 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.7-tuxcare.5.
- Record
CLSA-2026-1793101437- Updated
- 2026-11-02
OSVCLSA-2026-1793101539 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.14-tuxcare.4.
- Record
CLSA-2026-1793101539- Updated
- 2026-11-02
OSVCLSA-2026-1793101597 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.9-tuxcare.5.
- Record
CLSA-2026-1793101597- Updated
- 2026-11-02
OSVCLSA-2026-1793101938 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.10-tuxcare.5.
- Record
CLSA-2026-1793101938- Updated
- 2026-11-02
OSVCLSA-2026-1793102164 No score
TuxCare security update for dompurify (4 CVEs)
TuxCare rebuilt dompurify to address 4 CVEs. Fixed in 3.4.12-tuxcare.3.
- Record
CLSA-2026-1793102164- Updated
- 2026-11-02
OSVCLSA-2026-1793102424 No score
TuxCare security update for dompurify (3 CVEs)
TuxCare rebuilt dompurify to address 3 CVEs. Fixed in 3.4.15-tuxcare.3.
- Record
CLSA-2026-1793102424- Updated
- 2026-11-02
OSVCLSA-2026-1793120002 No score
TuxCare security update for dompurify (2 CVEs)
TuxCare rebuilt dompurify to address 2 CVEs. Fixed in 3.4.16-tuxcare.1.
- Record
CLSA-2026-1793120002- Updated
- 2026-11-02
OSVCLSA-2026-1793348733 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.8-tuxcare.8.
- Record
CLSA-2026-1793348733- Updated
- 2026-11-02
OSVCLSA-2026-1793348774 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.9-tuxcare.6.
- Record
CLSA-2026-1793348774- Updated
- 2026-11-02
OSVCLSA-2026-1793348834 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.10-tuxcare.6.
- Record
CLSA-2026-1793348834- Updated
- 2026-11-02
OSVCLSA-2026-1793348929 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.5-tuxcare.6.
- Record
CLSA-2026-1793348929- Updated
- 2026-11-02
OSVCLSA-2026-1793349051 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.12-tuxcare.4.
- Record
CLSA-2026-1793349051- Updated
- 2026-11-02
OSVCLSA-2026-1793349529 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.14-tuxcare.5.
- Record
CLSA-2026-1793349529- Updated
- 2026-11-02
OSVCLSA-2026-1793349839 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.11-tuxcare.6.
- Record
CLSA-2026-1793349839- Updated
- 2026-11-02
OSVCLSA-2026-1793350195 No score
TuxCare security update for dompurify (1 CVE)
TuxCare rebuilt dompurify to address 1 CVE. Fixed in 3.4.15-tuxcare.4.
- Record
CLSA-2026-1793350195- Updated
- 2026-11-02
OSVROOT-APP-NPM-GHSA-cg2g-xh64-v4q7 No score
GHSA-cg2g-xh64-v4q7 in dompurify - Patched by Root
Root has patched GHSA-cg2g-xh64-v4q7 in the dompurify package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-GHSA-cg2g-xh64-v4q7- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
dompurifynpm |
3.4.4 to 3.4.16 | 3.4.17 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.5-tuxcare.0 up to 3.4.5-tuxcare.5, plus listed versions 3.4.53.4.5-tuxcare.13.4.5-tuxcare.23.4.5-tuxcare.33.4.5-tuxcare.4 |
3.4.5-tuxcare.5 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.8-tuxcare.0 up to 3.4.8-tuxcare.7, plus listed versions 3.4.83.4.8-tuxcare.13.4.8-tuxcare.23.4.8-tuxcare.33.4.8-tuxcare.43.4.8-tuxcare.53.4.8-tuxcare.6 |
3.4.8-tuxcare.7 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.13-tuxcare.0 up to 3.4.13-tuxcare.3, plus listed versions 3.4.133.4.13-tuxcare.13.4.13-tuxcare.2 |
3.4.13-tuxcare.3 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.11-tuxcare.0 up to 3.4.11-tuxcare.5, plus listed versions 3.4.113.4.11-tuxcare.13.4.11-tuxcare.23.4.11-tuxcare.33.4.11-tuxcare.4 |
3.4.11-tuxcare.5 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.6-tuxcare.0 up to 3.4.6-tuxcare.5, plus listed versions 3.4.63.4.6-tuxcare.13.4.6-tuxcare.23.4.6-tuxcare.33.4.6-tuxcare.4 |
3.4.6-tuxcare.5 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.7-tuxcare.0 up to 3.4.7-tuxcare.5, plus listed versions 3.4.73.4.7-tuxcare.13.4.7-tuxcare.23.4.7-tuxcare.33.4.7-tuxcare.4 |
3.4.7-tuxcare.5 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.14-tuxcare.0 up to 3.4.14-tuxcare.4, plus listed versions 3.4.143.4.14-tuxcare.13.4.14-tuxcare.23.4.14-tuxcare.3 |
3.4.14-tuxcare.4 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.9-tuxcare.0 up to 3.4.9-tuxcare.5, plus listed versions 3.4.93.4.9-tuxcare.13.4.9-tuxcare.23.4.9-tuxcare.33.4.9-tuxcare.4 |
3.4.9-tuxcare.5 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.10-tuxcare.0 up to 3.4.10-tuxcare.5, plus listed versions 3.4.103.4.10-tuxcare.13.4.10-tuxcare.23.4.10-tuxcare.33.4.10-tuxcare.4 |
3.4.10-tuxcare.5 |
Show 19 moreShow less
| Package | Affected | Fixed |
|---|---|---|
dompurifyTuxCare:npm From an advisory covering 3 CVEs |
3.4.12-tuxcare.0 up to 3.4.12-tuxcare.3, plus listed versions 3.4.123.4.12-tuxcare.13.4.12-tuxcare.2 |
3.4.12-tuxcare.3 |
dompurifyTuxCare:npm From an advisory covering 2 CVEs |
3.4.15-tuxcare.0 up to 3.4.15-tuxcare.3, plus listed versions 3.4.153.4.15-tuxcare.13.4.15-tuxcare.2 |
3.4.15-tuxcare.3 |
dompurifyTuxCare:npm |
3.4.16-tuxcare.0 up to 3.4.16-tuxcare.1, plus listed versions 3.4.16 |
3.4.16-tuxcare.1 |
dompurifyTuxCare:npm |
3.4.8-tuxcare.0 up to 3.4.8-tuxcare.8, plus listed versions 3.4.83.4.8-tuxcare.13.4.8-tuxcare.23.4.8-tuxcare.33.4.8-tuxcare.43.4.8-tuxcare.53.4.8-tuxcare.63.4.8-tuxcare.7 |
3.4.8-tuxcare.8 |
dompurifyTuxCare:npm |
3.4.9-tuxcare.0 up to 3.4.9-tuxcare.6, plus listed versions 3.4.93.4.9-tuxcare.13.4.9-tuxcare.23.4.9-tuxcare.33.4.9-tuxcare.43.4.9-tuxcare.5 |
3.4.9-tuxcare.6 |
dompurifyTuxCare:npm |
3.4.10-tuxcare.0 up to 3.4.10-tuxcare.6, plus listed versions 3.4.103.4.10-tuxcare.13.4.10-tuxcare.23.4.10-tuxcare.33.4.10-tuxcare.43.4.10-tuxcare.5 |
3.4.10-tuxcare.6 |
dompurifyTuxCare:npm |
3.4.5-tuxcare.0 up to 3.4.5-tuxcare.6, plus listed versions 3.4.53.4.5-tuxcare.13.4.5-tuxcare.23.4.5-tuxcare.33.4.5-tuxcare.43.4.5-tuxcare.5 |
3.4.5-tuxcare.6 |
dompurifyTuxCare:npm |
3.4.12-tuxcare.0 up to 3.4.12-tuxcare.4, plus listed versions 3.4.123.4.12-tuxcare.13.4.12-tuxcare.23.4.12-tuxcare.3 |
3.4.12-tuxcare.4 |
dompurifyTuxCare:npm |
3.4.14-tuxcare.0 up to 3.4.14-tuxcare.5, plus listed versions 3.4.143.4.14-tuxcare.13.4.14-tuxcare.23.4.14-tuxcare.33.4.14-tuxcare.4 |
3.4.14-tuxcare.5 |
dompurifyTuxCare:npm |
3.4.11-tuxcare.0 up to 3.4.11-tuxcare.6, plus listed versions 3.4.113.4.11-tuxcare.13.4.11-tuxcare.23.4.11-tuxcare.33.4.11-tuxcare.43.4.11-tuxcare.5 |
3.4.11-tuxcare.6 |
dompurifyTuxCare:npm |
3.4.15-tuxcare.0 up to 3.4.15-tuxcare.4, plus listed versions 3.4.153.4.15-tuxcare.13.4.15-tuxcare.23.4.15-tuxcare.3 |
3.4.15-tuxcare.4 |
node-dompurifyDebian:14 |
before 3.4.17+dfsg-1, plus listed versions 3.1.7+dfsg+~3.0.5-23.2.5+dfsg-13.3.2+dfsg-13.3.3+dfsg-13.3.3+dfsg-2 Show 7 moreShow less3.4.1+dfsg-13.4.12+dfsg-13.4.13+dfsg-13.4.13+dfsg-23.4.16+dfsg-13.4.2+dfsg-13.4.5+dfsg-1 |
3.4.17+dfsg-1 |
dompurifynpm |
3.4.4 up to 3.4.17 | 3.4.17 |
dompurifyRoot:npm |
before 3.4.11-aikido.1 | 3.4.11-aikido.13.4.13-aikido.13.4.14-aikido.13.4.15-aikido.13.4.15-aikido.23.4.16-aikido.13.4.16-aikido.2 |
@rootio/dompurifyRoot:npm |
before 3.4.11-root.io.1 | 3.4.11-root.io.13.4.13-root.io.13.4.14-root.io.13.4.15-root.io.13.4.15-root.io.23.4.16-root.io.13.4.16-root.io.2 |
node-dompurifyUbuntu:22.04:LTS |
All versions, plus listed versions 2.3.0+dfsg-22.3.3+dfsg-1 |
None known |
node-dompurifyUbuntu:24.04:LTS |
All versions, plus listed versions 2.4.1+dfsg+~2.4.0-13.0.9+dfsg+~3.0.5-1 |
None known |
node-dompurifyUbuntu:26.10 |
All versions, plus listed versions 3.3.3+dfsg-13.4.2+dfsg-13.4.5+dfsg-13.4.12+dfsg-13.4.13+dfsg-13.4.13+dfsg-2 |
None known |
node-dompurifyUbuntu:26.04:LTS |
All versions, plus listed versions 3.1.7+dfsg+~3.0.5-23.3.3+dfsg-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | ||
| facts | EUVD, OSV | |
| affected | NVD, OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-116804 is a medium vulnerability (CVSS 5.1) in Cure53 Dompurify, published October 22, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.18%, the 7th percentile. Fixed in dompurify 3.4.17.
References
github.com/cure53/DOMPurify/security/advisories/GHSA-cg2g-xh64-v4q7
vulncheck.com/advisories/dompurify-from-3.4.4-before-3.4.17-safe-for-templates-bypass-via-shadow-root-content
nvd.nist.gov/vuln/detail/CVE-2026-116804
github.com/advisories/GHSA-6vxf-252m-8g79
github.com/cure53/DOMPurify/pull/1672
github.com/cure53/DOMPurify/commit/a77a3e78b59f72fa4d1c83f22e121ad9cc7d3575
Show 7 moreShow less
github.com/cure53/DOMPurify/releases/tag/3.4.17
github.com/advisories/GHSA-cg2g-xh64-v4q7
github.com/CVEProject/cvelistV5/tree/main/cves/2026/116xxx/CVE-2026-116804.json
security-tracker.debian.org/tracker/CVE-2026-116804
github.com/cure53/DOMPurify
ubuntu.com/security/CVE-2026-116804
cve.org/CVERecord?id=CVE-2026-116804
Left out here: the rest of 2 source descriptions. The JSON record has them.