CVE-2026-33937: handlebars.js · Type Confusion
Affects handlebars.jsSource CVE Database V5
Not known to be exploited · CVSS 9.8 Critical : upgrade to 4.7.9 as a priority.
Data as of 30 Oct 2026, 11:52 UTC
- EPSS
- 1.9% chance of exploitation in 30 days – higher than 79% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
- Patch
- Available – fixed in 4.7.9
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HExploitation evidence
Disclosed: evidence found.
CVE published 27 Mar 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponized: evidence found.
Public exploit code: GitHub proofs of concept
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), GitHub proofs of concept, the Metasploit, Exploit-DB and nuclei-templates index as of 30 Oct 2026.
What to do
Upgrade handlebars.js and handlebars to 4.7.9.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| handlebars-langhandlebars.js | Affected
| Fixed in
|
npmhandlebarspkg:npm/handlebarsOther threats | Affected
| Fixed in
|
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
AI-suggested
An official fix is available in Handlebars.js version 4.7.9. Users should upgrade to this version to remediate the vulnerability. Until upgrading, mitigate by validating input types before calling Handlebars.compile() to ensure the argument is always a string and not a deserialized object. Alternatively, use the Handlebars runtime-only build on the server if templates are pre-compiled at build time, which disables the compile() function and prevents exploitation.
Description
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, `Handlebars.compile()` accepts a pre-parsed AST object in addition to a template string. The `value` field of a `NumberLiteral` AST node is emitted directly into the generated JavaScript without quoting or sanitization. An attacker who can supply a crafted AST to `compile()` can therefore inject and execute arbitrary JavaScript, leading to Remote Code Execution on the server. Version 4.7.9 fixes the issue. Some workarounds are available. Validate input type before calling `Handlebars.compile()`; ensure the argument is always a `string`, never a plain object or JSON-deserialized value. Use the Handlebars runtime-only build (`handlebars/runtime`) on the server if templates are pre-compiled at build time; `compile()` will be unavailable.
References
- github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2w6w-674q-4c4q (opens in a new tab)
- github.com/handlebars-lang/handlebars.js/commit/68d8df5a88e0a26fe9e6084c5c6aaebe67b07da2 (opens in a new tab)
- github.com/handlebars-lang/handlebars.js/releases/tag/v4.7.9 (opens in a new tab)
- access.redhat.com/security/cve/CVE-2026-33937 (opens in a new tab)
- bugzilla.redhat.com/show_bug.cgi?id=2452523 (opens in a new tab)
- security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-33937.json (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:34342 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:10175 (opens in a new tab)