GitHub Advisoryadvisory · npm
GHSA-xw65-4hp5-5hc7 Handlebars: JavaScript Injection via Unsafe Inline Embedding of Precompiled Templates
MEDIUM
Official page ↗
- Aliases
- CVE-2026-106444
- Ecosystem
- npm
- Packages
- handlebars
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N
- Weaknesses
- CWE-116
- Reviewed
- 2026-10-08
Affected packages
• npm handlebars: >= 4.0.0, < 4.7.10 → fixed in 4.7.10
Description
Summary
`Handlebars.precompile()` generates JavaScript source that is commonly embedded in browser `` elements. Before the fix, static template text containing `` was emitted unchanged. HTML parsers recognize `` even inside a JavaScript string literal, closing the surrounding script element and allowing following attacker-controlled markup to be parsed and executed.
This affects applications that precompile attacker-controlled templates and embed the generated source directly in an HTML `` element. It does not affect ordinary server-side rendering or precompiled templates delivered as external JavaScript files.
Details
Static text is serialized by `quotedString()` in `lib/handlebars/compiler/code-gen.js`. The generated JavaScript is valid, but JavaScript quoting alone does not make it safe to embed in HTML. In HTML script data, the sequence `` terminates the element regardless of JavaScript string context.
On affected releases, this template:
```handlebars
safealert("XSS")
```
could produce generated source containing:
```js
return 'safealert("XSS")';
```
When included inline in an HTML document, the first `` closes the script containing the precompiled template. The next `` element is then parsed as HTML and executes.
Proof of Concept
```js
const Handlebars = require('handlebars');
const template = 'safealert("XSS")';
const output = Handlebars.precompile(template);
console.log(output.includes(''));
```
Affected versions print `true`. Embedding `output` directly in an inline `` element allows the injected script tag to be parsed by the browser.
Workarounds
• Do not inline precompiled output from untrusted templates into HTML documents.
• Serve generated precompiled templates as external JavaScript files where practical.
Credits
Reported by Curly-Haired-Baboon Aka Laplas
Related
Alias · CVE (1)
- CVE-2026-106444 Handlebars provides the power necessary to let users build semantic templates. vulnerability
Weakness · CWE (1)
- CWE-116 Improper Encoding or Escaping of Output weakness
References
- https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xw65-4hp5-5hc7 web
- https://nvd.nist.gov/vuln/detail/CVE-2026-106444 advisory
- https://github.com/handlebars-lang/handlebars.js/pull/2185 web
- https://github.com/handlebars-lang/handlebars.js/commit/609d1b11c833c9a3e00f56f2f34d22f425446725 web
- https://github.com/handlebars-lang/handlebars.js package
- https://github.com/handlebars-lang/handlebars.js/releases/tag/v4.7.10 web