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.
Published: 2026-03-27
Score: 9.8 Critical
EPSS: < 1% Very Low
KEV: No
Impact: Remote Code Execution
Action: Immediate Patch
AI Analysis

Impact

Handlebars, a templating engine widely used in web applications, has a flaw in versions 4.0.0 through 4.7.8. The library’s compile function accepts a pre‑parsed abstract syntax tree (AST) as well as a plain text template. In a NumberLiteral node the numeric value is inserted into the generated JavaScript output without quotations or any form of sanitization. An attacker who can supply a crafted AST to compile can therefore inject and execute arbitrary JavaScript when the template is rendered. This allows remote code execution on the server with the privileges of the process running Handlebars. The weakness is reflected in CWE‑843 (Incorrect Type Conversion) and CWE‑94 (Code Injection).

Affected Systems

The affected package is Handlebars.js, maintained by the handlebars‑lang project. All releases from 4.0.0 up to, but not including, 4.7.9 are vulnerable. The issue applies to environments that use the Node.js runtime, as indicated by the CPE string. Version 4.7.9 and later contain a fix that removes the ability to pass an AST directly to compile and properly sanitizes numeric values.

Risk and Exploitability

The vulnerability carries a CVSS score of 9.8, indicating critical severity. The EPSS score is listed as less than 1 %, suggesting that few attacks have been observed or expected. It is not currently included in the CISA KEV catalog. Exploitation requires an attacker to supply a malicious AST to the compile function, which may be feasible through application input that is passed directly to compile or via an API that accepts template data without validation. When successful, the attacker can run arbitrary JavaScript with the permission of the hosting process.

Generated by OpenCVE AI on March 31, 2026 at 19:42 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade to Handlebars 4.7.9 or newer to patch the vulnerability.
  • If an upgrade is not immediately possible, validate that the argument to Handlebars.compile is a string; reject or reject objects that could be parsed as an AST.
  • For pre‑compiled templates, use the runtime‑only build (handlebars/runtime), which removes the compile function from the server environment.
  • As a temporary measure, disable any functionality that accepts untrusted template data from external users.

Generated by OpenCVE AI on March 31, 2026 at 19:42 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-2w6w-674q-4c4q Handlebars.js has JavaScript Injection via AST Type Confusion
History

Tue, 31 Mar 2026 18:00:00 +0000

Type Values Removed Values Added
CPEs cpe:2.3:a:handlebarsjs:handlebars:*:*:*:*:*:node.js:*:*

Tue, 31 Mar 2026 15:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Mon, 30 Mar 2026 08:15:00 +0000

Type Values Removed Values Added
First Time appeared Handlebarsjs
Handlebarsjs handlebars
Vendors & Products Handlebarsjs
Handlebarsjs handlebars

Sat, 28 Mar 2026 12:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

threat_severity

Important


Sat, 28 Mar 2026 03:15:00 +0000

Type Values Removed Values Added
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.
Title Handlebars.js has JavaScript Injection via AST Type Confusion
Weaknesses CWE-843
CWE-94
References
Metrics cvssV3_1

{'score': 9.8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'}


Subscriptions

Handlebarsjs Handlebars
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-04-01T03:55:43.931Z

Reserved: 2026-03-24T19:50:52.103Z

Link: CVE-2026-33937

cve-icon Vulnrichment

Updated: 2026-03-31T14:23:15.301Z

cve-icon NVD

Status : Analyzed

Published: 2026-03-27T21:17:27.417

Modified: 2026-03-31T17:49:05.807

Link: CVE-2026-33937

cve-icon Redhat

Severity : Important

Publid Date: 2026-03-27T21:03:46Z

Links: CVE-2026-33937 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-03-31T20:00:41Z

Weaknesses