HighGHSA-2cf5-4w76-r9qv

Arbitrary Code Execution in handlebars

Published 4 Sept 2020 · Updated 10 Sept 2026

Affected packages

Affected
<3.0.8
Fixed in
3.0.8
Update to the fixed version for your release line, for example:npm install handlebars@3.0.8
Affected
>=4.0.0 <4.5.2
Fixed in
4.5.2
Update to the fixed version for your release line, for example:npm install handlebars@4.5.2

Details

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.

Is GHSA-2cf5-4w76-r9qv in any of your client repos?

Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected handlebars, and gives you the command that fixes it.

References

Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.