CVE-2026-41238
DOMPurify: Prototype Pollution to XSS Bypass via CUSTOM_ELEMENT_HANDLING Fallback
DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization. Version 3.4.0 fixes the issue.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.9
DOMPurify: Prototype Pollution to XSS Bypass via CUSTOM_ELEMENT_HANDLING Fallback
DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization. Version 3.4.0 fixes the issue.
- Record
CVE-2026-41238- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Weakness
- CWE-79, CWE-1321
- Updated
- 2026-11-02
EUVDEUVD-2026-25236
6.9
DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization. Version 3.4.0 fixes the issue.
- Record
EUVD-2026-25236- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-2cf5-4w76-r9qv
7.3
Arbitrary Code Execution in handlebars
Versions of handlebars prior to 3.0.8 or 4.5.2 are vulnerable to Arbitrary Code Execution. The package's lookup helper fails to properly validate templates, allowing attackers to submit templates that execute arbitrary JavaScript in the system. It can be used to run arbitrary code in a server processing Handlebars templates or on a victim's browser (effectively serving as Cross-Site Scripting).
The following template can be used to demonstrate the vulnerability:
{{#with split as |a|}}
{{pop (push "alert('Vulnerable Handlebars JS');")}}
{{#with (concat (lookup join (slice 0 1)))}}
{{#each (slice 2 3)}}
{{#with (apply 0 a)}}
{{.}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}```
## Recommendation
Upgrade to version 3.0.8, 4.5.2 or later.
- Record
GHSA-2cf5-4w76-r9qv- CVSS 3.1
- 7.3 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:L/I:H/A:L - Weakness
- CWE-94
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-q42p-pg8m-cqh6
7.3
Prototype Pollution in handlebars
Versions of handlebars prior to 4.0.14 are vulnerable to Prototype Pollution. Templates may alter an Objects' prototype, thus allowing an attacker to execute arbitrary code on the server.
Recommendation
For handlebars 4.1.x upgrade to 4.1.2 or later. For handlebars 4.0.x upgrade to 4.0.14 or later.
- Record
GHSA-q42p-pg8m-cqh6- CVSS 3.1
- 7.3 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-471
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-v9jr-rg53-9pgp
6.9
DOMPurify: Prototype Pollution to XSS Bypass via CUSTOM_ELEMENT_HANDLING Fallback
Summary
DOMPurify versions 3.0.1 through 3.3.3 (latest) are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization.
Affected Versions
- 3.0.1 through 3.3.3 (current latest) — all affected
- 3.0.0 and all 2.x versions — NOT affected (used
Object.create(null)for initialization, no|| {}reassignment) - The vulnerable
|| {}reassignment was introduced in the 3.0.0→3.0.1 refactor - This is distinct from GHSA-cj63-jhhr-wcxv (USE_PROFILES Array.prototype pollution, fixed in 3.3.2)
- This is distinct from CVE-2024-45801 / GHSA-mmhx-hmjr-r674 (__depth prototype pollution, fixed in 3.1.3)
Root Cause
In purify.js at line 590, during config parsing:
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
When no CUSTOM_ELEMENT_HANDLING is specified in the config (the default usage pattern), cfg.CUSTOM_ELEMENT_HANDLING is undefined, and the fallback {} is used. This plain object inherits from Object.prototype.
Lines 591-598 then check cfg.CUSTOM_ELEMENT_HANDLING (the original config property) — which is undefined — so the conditional blocks that would set tagNameCheck and attributeNameCheck from the config are never entered.
As a result, CUSTOM_ELEMENT_HANDLING.tagNameCheck and CUSTOM_ELEMENT_HANDLING.attributeNameCheck resolve via the prototype chain. If an attacker has polluted Object.prototype.tagNameCheck and Object.prototype.attributeNameCheck with permissive values (e.g., /.*/), these polluted values flow into DOMPurify's custom element validation at lines 973-977 and attribute validation, causing all custom elements and all attributes to be allowed.
Impact
- Attack type: XSS bypass via prototype pollution chain
- Prerequisites: Attacker must have a prototype pollution primitive in the same execution context (e.g., vulnerable version of lodash, jQuery.extend, query-string parser, deep merge utility, or any other PP gadget)
- Config required: Default. No special DOMPurify configuration needed. The standard
DOMPurify.sanitize(userInput)call is affected. - Payload: Any HTML custom element (name containing a hyphen) with event handler attributes survives sanitization
Proof of Concept
// Step 1: Attacker exploits a prototype pollution gadget elsewhere in the application
Object.prototype.tagNameCheck = /.*/;
Object.prototype.attributeNameCheck = /.*/;
// Step 2: Application sanitizes user input with DEFAULT config
const clean = DOMPurify.sanitize('<x-x onfocus=alert(document.cookie) tabindex=0 autofocus>');
// Step 3: "Sanitized" output still contains the event handler
console.log(clean);
// Output: <x-x onfocus="alert(document.cookie)" tabindex="0" autofocus="">
// Step 4: When injected into DOM, XSS executes
document.body.innerHTML = clean; // alert() fires
Tested configurations that are vulnerable:
| Call Pattern | Vulnerable? |
|---|---|
| DOMPurify.sanitize(input) | YES |
| DOMPurify.sanitize(input, {}) | YES |
| DOMPurify.sanitize(input, { CUSTOM_ELEMENT_HANDLING: null }) | YES |
| DOMPurify.sanitize(input, { CUSTOM_ELEMENT_HANDLING: {} }) | NO (explicit object triggers L591 path) |
Suggested Fix
Change line 590 from:
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
To:
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || create(null);
The create(null) function (already used elsewhere in DOMPurify, e.g., in clone()) creates an object with no prototype, preventing prototype chain inheritance.
Alternative application-level…
- Record
GHSA-v9jr-rg53-9pgp- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Weakness
- CWE-79, CWE-1321
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-g9r4-xpmj-mj65 No score
Prototype Pollution in handlebars
Versions of handlebars prior to 3.0.8 or 4.5.3 are vulnerable to prototype pollution. It is possible to add or modify properties to the Object prototype through a malicious template. This may allow attackers to crash the application or execute Arbitrary Code in specific conditions.
Recommendation
Upgrade to version 3.0.8, 4.5.3 or later.
- Record
GHSA-g9r4-xpmj-mj65- Weakness
- CWE-1321
- Updated
- 2026-11-02
Show 37 moreShow less
GitHub AdvisoriesGHSA-q2c6-c6pm-g3gh No score
Arbitrary Code Execution in handlebars
Versions of handlebars prior to 3.0.8 or 4.5.3 are vulnerable to Arbitrary Code Execution. The package's lookup helper fails to properly validate templates, allowing attackers to submit templates that execute arbitrary JavaScript in the system. It is due to an incomplete fix for a previous issue. This vulnerability can be used to run arbitrary code in a server processing Handlebars templates or on a victim's browser (effectively serving as Cross-Site Scripting).
Recommendation
Upgrade to version 3.0.8, 4.5.3 or later.
- Record
GHSA-q2c6-c6pm-g3gh- Updated
- 2026-11-02
NVD
6.9
DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization. Version 3.4.0 fixes the issue.
- Record
CVE-2026-41238- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Weakness
- CWE-79, CWE-1321
- Updated
- 2026-11-02
OSV
6.9
DOMPurify: Prototype Pollution to XSS Bypass via CUSTOM_ELEMENT_HANDLING Fallback
DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization. Version 3.4.0 fixes the issue.
- Record
CVE-2026-41238- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Weakness
- CWE-1321, CWE-79
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-41238
6.9
DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization. Version 3.4.0 fixes the issue.
- Record
DEBIAN-CVE-2026-41238- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
OSVGHSA-2cf5-4w76-r9qv
7.3
Arbitrary Code Execution in handlebars
Versions of handlebars prior to 3.0.8 or 4.5.2 are vulnerable to Arbitrary Code Execution. The package's lookup helper fails to properly validate templates, allowing attackers to submit templates that execute arbitrary JavaScript in the system. It can be used to run arbitrary code in a server processing Handlebars templates or on a victim's browser (effectively serving as Cross-Site Scripting).
The following template can be used to demonstrate the vulnerability:
{{#with split as |a|}}
{{pop (push "alert('Vulnerable Handlebars JS');")}}
{{#with (concat (lookup join (slice 0 1)))}}
{{#each (slice 2 3)}}
{{#with (apply 0 a)}}
{{.}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}```
## Recommendation
Upgrade to version 3.0.8, 4.5.2 or later.
- Record
GHSA-2cf5-4w76-r9qv- CVSS 3.1
- 7.3 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:L/I:H/A:L - Weakness
- CWE-94
- Updated
- 2026-11-02
OSVGHSA-q42p-pg8m-cqh6
7.3
Prototype Pollution in handlebars
Versions of handlebars prior to 4.0.14 are vulnerable to Prototype Pollution. Templates may alter an Objects' prototype, thus allowing an attacker to execute arbitrary code on the server.
Recommendation
For handlebars 4.1.x upgrade to 4.1.2 or later. For handlebars 4.0.x upgrade to 4.0.14 or later.
- Record
GHSA-q42p-pg8m-cqh6- CVSS 3.1
- 7.3 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-471
- Updated
- 2026-11-02
OSVGHSA-v9jr-rg53-9pgp
6.9
DOMPurify: Prototype Pollution to XSS Bypass via CUSTOM_ELEMENT_HANDLING Fallback
Summary
DOMPurify versions 3.0.1 through 3.3.3 (latest) are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization.
Affected Versions
- 3.0.1 through 3.3.3 (current latest) — all affected
- 3.0.0 and all 2.x versions — NOT affected (used
Object.create(null)for initialization, no|| {}reassignment) - The vulnerable
|| {}reassignment was introduced in the 3.0.0→3.0.1 refactor - This is distinct from GHSA-cj63-jhhr-wcxv (USE_PROFILES Array.prototype pollution, fixed in 3.3.2)
- This is distinct from CVE-2024-45801 / GHSA-mmhx-hmjr-r674 (__depth prototype pollution, fixed in 3.1.3)
Root Cause
In purify.js at line 590, during config parsing:
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
When no CUSTOM_ELEMENT_HANDLING is specified in the config (the default usage pattern), cfg.CUSTOM_ELEMENT_HANDLING is undefined, and the fallback {} is used. This plain object inherits from Object.prototype.
Lines 591-598 then check cfg.CUSTOM_ELEMENT_HANDLING (the original config property) — which is undefined — so the conditional blocks that would set tagNameCheck and attributeNameCheck from the config are never entered.
As a result, CUSTOM_ELEMENT_HANDLING.tagNameCheck and CUSTOM_ELEMENT_HANDLING.attributeNameCheck resolve via the prototype chain. If an attacker has polluted Object.prototype.tagNameCheck and Object.prototype.attributeNameCheck with permissive values (e.g., /.*/), these polluted values flow into DOMPurify's custom element validation at lines 973-977 and attribute validation, causing all custom elements and all attributes to be allowed.
Impact
- Attack type: XSS bypass via prototype pollution chain
- Prerequisites: Attacker must have a prototype pollution primitive in the same execution context (e.g., vulnerable version of lodash, jQuery.extend, query-string parser, deep merge utility, or any other PP gadget)
- Config required: Default. No special DOMPurify configuration needed. The standard
DOMPurify.sanitize(userInput)call is affected. - Payload: Any HTML custom element (name containing a hyphen) with event handler attributes survives sanitization
Proof of Concept
// Step 1: Attacker exploits a prototype pollution gadget elsewhere in the application
Object.prototype.tagNameCheck = /.*/;
Object.prototype.attributeNameCheck = /.*/;
// Step 2: Application sanitizes user input with DEFAULT config
const clean = DOMPurify.sanitize('<x-x onfocus=alert(document.cookie) tabindex=0 autofocus>');
// Step 3: "Sanitized" output still contains the event handler
console.log(clean);
// Output: <x-x onfocus="alert(document.cookie)" tabindex="0" autofocus="">
// Step 4: When injected into DOM, XSS executes
document.body.innerHTML = clean; // alert() fires
Tested configurations that are vulnerable:
| Call Pattern | Vulnerable? |
|---|---|
| DOMPurify.sanitize(input) | YES |
| DOMPurify.sanitize(input, {}) | YES |
| DOMPurify.sanitize(input, { CUSTOM_ELEMENT_HANDLING: null }) | YES |
| DOMPurify.sanitize(input, { CUSTOM_ELEMENT_HANDLING: {} }) | NO (explicit object triggers L591 path) |
Suggested Fix
Change line 590 from:
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
To:
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || create(null);
The create(null) function (already used elsewhere in DOMPurify, e.g., in clone()) creates an object with no prototype, preventing prototype chain inheritance.
Alternative application-level…
- Record
GHSA-v9jr-rg53-9pgp- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Weakness
- CWE-1321, CWE-79
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-41238
6.9
DOMPurify is a DOM-only cross-site scripting sanitizer for HTML, MathML, and SVG. Versions 3.0.1 through 3.3.3 are vulnerable to a prototype pollution-based XSS bypass. When an application uses DOMPurify.sanitize() with the default configuration (no CUSTOM_ELEMENT_HANDLING option), a prior prototype pollution gadget can inject permissive tagNameCheck and attributeNameCheck regex values into Object.prototype, causing DOMPurify to allow arbitrary custom elements with arbitrary attributes — including event handlers — through sanitization. Version 3.4.0 fixes the issue.
- Record
UBUNTU-CVE-2026-41238- CVSS 3.1
- 6.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
OSVCLSA-2026-1774743817 No score
TuxCare security update for handlebars (1 CVE)
TuxCare rebuilt handlebars to address 1 CVE. Fixed in 1.3.0-tuxcare.1.
- Record
CLSA-2026-1774743817- Updated
- 2026-11-02
OSVCLSA-2026-1774743830 No score
TuxCare security update for handlebars (3 CVEs)
TuxCare rebuilt handlebars to address 3 CVEs. Fixed in 1.0.12-tuxcare.2.
- Record
CLSA-2026-1774743830- Updated
- 2026-11-02
OSVCLSA-2026-1778546719 No score
TuxCare security update for dompurify (6 CVEs)
TuxCare rebuilt dompurify to address 6 CVEs. Fixed in 3.1.6-tuxcare.3.
- Record
CLSA-2026-1778546719- Updated
- 2026-11-02
OSVCLSA-2026-1778805976 No score
TuxCare security update for dompurify (10 CVEs)
TuxCare rebuilt dompurify to address 10 CVEs. Fixed in 3.2.3-tuxcare.1.
- Record
CLSA-2026-1778805976- Updated
- 2026-11-02
OSVCLSA-2026-1780274966 No score
TuxCare security update for dompurify (10 CVEs)
TuxCare rebuilt dompurify to address 10 CVEs. Fixed in 3.0.3-tuxcare.1.
- Record
CLSA-2026-1780274966- Updated
- 2026-11-02
OSVCLSA-2026-1786731948 No score
TuxCare security update for dompurify (34 CVEs)
TuxCare rebuilt dompurify to address 34 CVEs. Fixed in 3.0.3-tuxcare.1.
- Record
CLSA-2026-1786731948- Updated
- 2026-11-02
OSVCLSA-2026-1787602198 No score
TuxCare security update for dompurify (10 CVEs)
TuxCare rebuilt dompurify to address 10 CVEs. Fixed in 3.2.7-tuxcare.1.
- Record
CLSA-2026-1787602198- Updated
- 2026-11-02
OSVCLSA-2026-1792155851 No score
TuxCare security update for dompurify (12 CVEs)
TuxCare rebuilt dompurify to address 12 CVEs. Fixed in 3.1.3-tuxcare.2.
- Record
CLSA-2026-1792155851- Updated
- 2026-11-02
OSVCLSA-2026-1792156267 No score
TuxCare security update for dompurify (9 CVEs)
TuxCare rebuilt dompurify to address 9 CVEs. Fixed in 3.1.2-tuxcare.2.
- Record
CLSA-2026-1792156267- Updated
- 2026-11-02
OSVCLSA-2026-1792156282 No score
TuxCare security update for dompurify (11 CVEs)
TuxCare rebuilt dompurify to address 11 CVEs. Fixed in 3.1.4-tuxcare.2.
- Record
CLSA-2026-1792156282- Updated
- 2026-11-02
OSVCLSA-2026-1792156382 No score
TuxCare security update for dompurify (9 CVEs)
TuxCare rebuilt dompurify to address 9 CVEs. Fixed in 3.0.2-tuxcare.2.
- Record
CLSA-2026-1792156382- Updated
- 2026-11-02
OSVCLSA-2026-1792156694 No score
TuxCare security update for dompurify (11 CVEs)
TuxCare rebuilt dompurify to address 11 CVEs. Fixed in 3.0.8-tuxcare.2.
- Record
CLSA-2026-1792156694- Updated
- 2026-11-02
OSVCLSA-2026-1792157013 No score
TuxCare security update for dompurify (13 CVEs)
TuxCare rebuilt dompurify to address 13 CVEs. Fixed in 3.1.0-tuxcare.2.
- Record
CLSA-2026-1792157013- Updated
- 2026-11-02
OSVCLSA-2026-1792157113 No score
TuxCare security update for dompurify (12 CVEs)
TuxCare rebuilt dompurify to address 12 CVEs. Fixed in 3.0.11-tuxcare.2.
- Record
CLSA-2026-1792157113- Updated
- 2026-11-02
OSVCLSA-2026-1792369452 No score
TuxCare security update for dompurify (6 CVEs)
TuxCare rebuilt dompurify to address 6 CVEs. Fixed in 3.0.6-tuxcare.3.
- Record
CLSA-2026-1792369452- Updated
- 2026-11-02
OSVCLSA-2026-1792424561 No score
TuxCare security update for dompurify (9 CVEs)
TuxCare rebuilt dompurify to address 9 CVEs. Fixed in 3.3.3-tuxcare.3.
- Record
CLSA-2026-1792424561- Updated
- 2026-11-02
OSVCLSA-2026-1792424669 No score
TuxCare security update for dompurify (9 CVEs)
TuxCare rebuilt dompurify to address 9 CVEs. Fixed in 3.2.6-tuxcare.3.
- Record
CLSA-2026-1792424669- Updated
- 2026-11-02
OSVCLSA-2026-1792453557 No score
TuxCare security update for dompurify (5 CVEs)
TuxCare rebuilt dompurify to address 5 CVEs. Fixed in 3.0.5-tuxcare.2.
- Record
CLSA-2026-1792453557- Updated
- 2026-11-02
OSVCLSA-2026-1792479087 No score
TuxCare security update for dompurify (5 CVEs)
TuxCare rebuilt dompurify to address 5 CVEs. Fixed in 3.0.4-tuxcare.2.
- Record
CLSA-2026-1792479087- Updated
- 2026-11-02
OSVCLSA-2026-1792486117 No score
TuxCare security update for dompurify (10 CVEs)
TuxCare rebuilt dompurify to address 10 CVEs. Fixed in 3.0.1-tuxcare.3.
- Record
CLSA-2026-1792486117- Updated
- 2026-11-02
OSVCLSA-2026-1792496766 No score
TuxCare security update for dompurify (9 CVEs)
TuxCare rebuilt dompurify to address 9 CVEs. Fixed in 3.0.9-tuxcare.3.
- Record
CLSA-2026-1792496766- Updated
- 2026-11-02
OSVCLSA-2026-1792594075 No score
TuxCare security update for dompurify (11 CVEs)
TuxCare rebuilt dompurify to address 11 CVEs. Fixed in 3.1.1-tuxcare.3.
- Record
CLSA-2026-1792594075- Updated
- 2026-11-02
OSVGHSA-g9r4-xpmj-mj65 No score
Prototype Pollution in handlebars
Versions of handlebars prior to 3.0.8 or 4.5.3 are vulnerable to prototype pollution. It is possible to add or modify properties to the Object prototype through a malicious template. This may allow attackers to crash the application or execute Arbitrary Code in specific conditions.
Recommendation
Upgrade to version 3.0.8, 4.5.3 or later.
- Record
GHSA-g9r4-xpmj-mj65- Weakness
- CWE-1321
- Updated
- 2026-11-02
OSVGHSA-q2c6-c6pm-g3gh No score
Arbitrary Code Execution in handlebars
Versions of handlebars prior to 3.0.8 or 4.5.3 are vulnerable to Arbitrary Code Execution. The package's lookup helper fails to properly validate templates, allowing attackers to submit templates that execute arbitrary JavaScript in the system. It is due to an incomplete fix for a previous issue. This vulnerability can be used to run arbitrary code in a server processing Handlebars templates or on a victim's browser (effectively serving as Cross-Site Scripting).
Recommendation
Upgrade to version 3.0.8, 4.5.3 or later.
- Record
GHSA-q2c6-c6pm-g3gh- Updated
- 2026-11-02
OSVROOT-APP-NPM-CVE-2026-41238 No score
CVE-2026-41238 in dompurify - Patched by Root
Root has patched CVE-2026-41238 in the dompurify package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-41238- Updated
- 2026-11-02
OSVROOT-APP-NPM-GHSA-2cf5-4w76-r9qv No score
GHSA-2cf5-4w76-r9qv in handlebars - Patched by Root
Root has patched GHSA-2cf5-4w76-r9qv in the handlebars package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-GHSA-2cf5-4w76-r9qv- Updated
- 2026-11-02
OSVROOT-APP-NPM-GHSA-g9r4-xpmj-mj65 No score
GHSA-g9r4-xpmj-mj65 in handlebars - Patched by Root
Root has patched GHSA-g9r4-xpmj-mj65 in the handlebars package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-GHSA-g9r4-xpmj-mj65- Updated
- 2026-11-02
OSVROOT-APP-NPM-GHSA-q2c6-c6pm-g3gh No score
GHSA-q2c6-c6pm-g3gh in handlebars - Patched by Root
Root has patched GHSA-q2c6-c6pm-g3gh in the handlebars package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-GHSA-q2c6-c6pm-g3gh- Updated
- 2026-11-02
OSVROOT-APP-NPM-GHSA-q42p-pg8m-cqh6 No score
GHSA-q42p-pg8m-cqh6 in handlebars - Patched by Root
Root has patched GHSA-q42p-pg8m-cqh6 in the handlebars package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-GHSA-q42p-pg8m-cqh6- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
handlebarsnpm |
before 3.0.8 | 3.0.8 |
handlebarsnpm |
4.0.0 up to 4.5.2 | 4.5.2 |
handlebarsnpm |
4.0.0 up to 4.5.3 | 4.5.3 |
handlebarsnpm |
4.1.0 up to 4.1.2 | 4.1.2 |
handlebarsnpm |
4.0.0 up to 4.0.14 | 4.0.14 |
handlebarsnpm |
before 3.0.7 | 3.0.7 |
dompurifynpm |
3.0.1 up to 3.4.0 | 3.4.0 |
handlebarsTuxCare:npm |
1.3.0-tuxcare.0 up to 1.3.0-tuxcare.1, plus listed versions 1.3.0 |
1.3.0-tuxcare.1 |
handlebarsTuxCare:npm |
1.0.12-tuxcare.0 up to 1.0.12-tuxcare.2, plus listed versions 1.0.121.0.12-tuxcare.1 |
1.0.12-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 3 CVEs |
3.1.6-tuxcare.0 up to 3.1.6-tuxcare.3, plus listed versions 3.1.63.1.6-tuxcare.13.1.6-tuxcare.2 |
3.1.6-tuxcare.3 |
Show 32 moreShow less
| Package | Affected | Fixed |
|---|---|---|
dompurifyTuxCare:npm From an advisory covering 6 CVEs |
3.2.3-tuxcare.0 up to 3.2.3-tuxcare.1, plus listed versions 3.2.3 |
3.2.3-tuxcare.1 |
dompurifyTuxCare:npm From an advisory covering 6 CVEs |
3.0.3-tuxcare.0 up to 3.0.3-tuxcare.1, plus listed versions 3.0.3 |
3.0.3-tuxcare.1 |
dompurifyTuxCare:npm From an advisory covering 8 CVEs |
3.2.7-tuxcare.0 up to 3.2.7-tuxcare.1, plus listed versions 3.2.7 |
3.2.7-tuxcare.1 |
dompurifyTuxCare:npm From an advisory covering 12 CVEs |
3.1.3-tuxcare.0 up to 3.1.3-tuxcare.2, plus listed versions 3.1.33.1.3-tuxcare.1 |
3.1.3-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 9 CVEs |
3.1.2-tuxcare.0 up to 3.1.2-tuxcare.2, plus listed versions 3.1.23.1.2-tuxcare.1 |
3.1.2-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 11 CVEs |
3.1.4-tuxcare.0 up to 3.1.4-tuxcare.2, plus listed versions 3.1.43.1.4-tuxcare.1 |
3.1.4-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 9 CVEs |
3.0.2-tuxcare.0 up to 3.0.2-tuxcare.2, plus listed versions 3.0.23.0.2-tuxcare.1 |
3.0.2-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 11 CVEs |
3.0.8-tuxcare.0 up to 3.0.8-tuxcare.2, plus listed versions 3.0.83.0.8-tuxcare.1 |
3.0.8-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 13 CVEs |
3.1.0-tuxcare.0 up to 3.1.0-tuxcare.2, plus listed versions 3.1.03.1.0-tuxcare.1 |
3.1.0-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 12 CVEs |
3.0.11-tuxcare.0 up to 3.0.11-tuxcare.2, plus listed versions 3.0.113.0.11-tuxcare.1 |
3.0.11-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 6 CVEs |
3.0.6-tuxcare.0 up to 3.0.6-tuxcare.3, plus listed versions 3.0.63.0.6-tuxcare.13.0.6-tuxcare.2 |
3.0.6-tuxcare.3 |
dompurifyTuxCare:npm From an advisory covering 9 CVEs |
3.3.3-tuxcare.0 up to 3.3.3-tuxcare.3, plus listed versions 3.3.33.3.3-tuxcare.13.3.3-tuxcare.2 |
3.3.3-tuxcare.3 |
dompurifyTuxCare:npm From an advisory covering 9 CVEs |
3.2.6-tuxcare.0 up to 3.2.6-tuxcare.3, plus listed versions 3.2.63.2.6-tuxcare.13.2.6-tuxcare.2 |
3.2.6-tuxcare.3 |
dompurifyTuxCare:npm From an advisory covering 5 CVEs |
3.0.5-tuxcare.0 up to 3.0.5-tuxcare.2, plus listed versions 3.0.53.0.5-tuxcare.1 |
3.0.5-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 5 CVEs |
3.0.4-tuxcare.0 up to 3.0.4-tuxcare.2, plus listed versions 3.0.43.0.4-tuxcare.1 |
3.0.4-tuxcare.2 |
dompurifyTuxCare:npm From an advisory covering 10 CVEs |
3.0.1-tuxcare.0 up to 3.0.1-tuxcare.3, plus listed versions 3.0.13.0.1-tuxcare.13.0.1-tuxcare.2 |
3.0.1-tuxcare.3 |
dompurifyTuxCare:npm From an advisory covering 9 CVEs |
3.0.9-tuxcare.0 up to 3.0.9-tuxcare.3, plus listed versions 3.0.93.0.9-tuxcare.13.0.9-tuxcare.2 |
3.0.9-tuxcare.3 |
dompurifyTuxCare:npm From an advisory covering 11 CVEs |
3.1.1-tuxcare.0 up to 3.1.1-tuxcare.3, plus listed versions 3.1.13.1.1-tuxcare.13.1.1-tuxcare.2 |
3.1.1-tuxcare.3 |
node-dompurifyDebian:12 |
All versions, plus listed versions 2.4.1+dfsg+~2.4.0-12.4.1+dfsg+~2.4.0-22.4.1+dfsg+~2.4.0-2+deb12u13.0.9+dfsg+~3.0.5-13.1.6+dfsg+~3.0.5-1 Show 13 moreShow less3.1.7+dfsg+~3.0.5-13.1.7+dfsg+~3.0.5-23.2.5+dfsg-13.3.2+dfsg-13.3.3+dfsg-13.3.3+dfsg-23.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 |
None known |
node-dompurifyDebian:13 |
All versions, 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 |
None known |
node-dompurifyDebian:14 |
before 3.4.1+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 |
3.4.1+dfsg-1 |
dompurifyRoot:npm |
before 3.2.4-aikido.1 | 3.2.4-aikido.13.2.4-aikido.23.2.4-aikido.33.2.4-aikido.43.2.4-aikido.53.4.0-aikido.1 |
@rootio/dompurifyRoot:npm |
before 3.2.4-root.io.1 | 3.2.4-root.io.13.2.4-root.io.23.2.4-root.io.33.2.4-root.io.43.2.4-root.io.53.4.0-root.io.1 |
handlebarsRoot:npm |
before 3.0.7-aikido.3 | 3.0.7-aikido.33.0.3-aikido.23.0.8-aikido.13.0.8-aikido.2 |
@rootio/handlebarsRoot:npm |
before 3.0.7-root.io.3 | 3.0.7-root.io.33.0.3-root.io.23.0.8-root.io.13.0.8-root.io.2 |
handlebarsRoot:npm |
before 3.0.3-aikido.2 | 3.0.3-aikido.23.0.7-aikido.13.0.7-aikido.23.0.7-aikido.3 |
@rootio/handlebarsRoot:npm |
before 3.0.3-root.io.2 | 3.0.3-root.io.23.0.7-root.io.13.0.7-root.io.23.0.7-root.io.3 |
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:25.10 |
All versions, plus listed versions 3.1.7+dfsg+~3.0.5-13.1.7+dfsg+~3.0.5-2 |
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 | ||
| affected | ||
| 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-41238 is a medium vulnerability (CVSS 6.9) in Cure53 Dompurify, published June 5, 2019. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.27%, the 19th percentile. Fixed in handlebars 3.0.8.
References
github.com/cure53/DOMPurify/security/advisories/GHSA-v9jr-rg53-9pgp
github.com/cure53/DOMPurify/releases/tag/3.4.0
npmjs.com/advisories/1316
github.com/advisories/GHSA-2cf5-4w76-r9qv
npmjs.com/advisories/1325
github.com/advisories/GHSA-g9r4-xpmj-mj65
Show 17 moreShow less
npmjs.com/advisories/1324
github.com/advisories/GHSA-q2c6-c6pm-g3gh
github.com/handlebars-lang/handlebars.js/issues/1495
github.com/handlebars-lang/handlebars.js/commit/7372d4e9dffc9d70c09671aa28b9392a1577fd86
snyk.io/vuln/SNYK-JS-HANDLEBARS-173692
npmjs.com/advisories/755
github.com/handlebars-lang/handlebars.js/commit/0d6d8c335ad81bad1b672fc56b6a44f6aa472dac
github.com/handlebars-lang/handlebars.js/commit/85c8783b34fc6d36145d8b53885ad0b9e3c3f9c4
github.com/handlebars-lang/handlebars.js/commit/cd38583216dce3252831916323202749431c773e
github.com/advisories/GHSA-q42p-pg8m-cqh6
nvd.nist.gov/vuln/detail/CVE-2026-41238
github.com/advisories/GHSA-v9jr-rg53-9pgp
github.com/CVEProject/cvelistV5/tree/main/cves/2026/41xxx/CVE-2026-41238.json
security-tracker.debian.org/tracker/CVE-2026-41238
github.com/cure53/DOMPurify
ubuntu.com/security/CVE-2026-41238
cve.org/CVERecord?id=CVE-2026-41238
Left out here: the rest of 2 source descriptions. The JSON record has them.