Staging Environment: Content and features may be unstable or change without notice.
Search for packages
Package details: pkg:npm/handlebars@4.3.2
purl pkg:npm/handlebars@4.3.2
Next non-vulnerable version 4.7.9
Latest non-vulnerable version 4.7.9
Risk 4.5
Vulnerabilities affecting this package (15)
Vulnerability Summary Fixed by
VCID-1wpr-wn5h-b3gy
Aliases:
CVE-2026-33940
GHSA-xhpv-hc6g-r9c6
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, a crafted object placed in the template context can bypass all conditional guards in `resolvePartial()` and cause `invokePartial()` to return `undefined`. The Handlebars runtime then treats the unresolved partial as a source that needs to be compiled, passing the crafted object to `env.compile()`. Because the object is a valid Handlebars AST containing injected code, the generated JavaScript executes arbitrary commands on the server. The attack requires the adversary to control a value that can be returned by a dynamic partial lookup. Version 4.7.9 fixes the issue. Some workarounds are available. First, use the runtime-only build (`require('handlebars/runtime')`). Without `compile()`, the fallback compilation path in `invokePartial` is unreachable. Second, sanitize context data before rendering: Ensure no value in the context is a non-primitive object that could be passed to a dynamic partial. Third, avoid dynamic partial lookups (`{{> (lookup ...)}}`) when context data is user-controlled.
4.7.9
Affected by 0 other vulnerabilities.
VCID-2vdk-f8x9-wqbb
Aliases:
CVE-2026-33938
GHSA-3mfm-83xf-c92r
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, the `@partial-block` special variable is stored in the template data context and is reachable and mutable from within a template via helpers that accept arbitrary objects. When a helper overwrites `@partial-block` with a crafted Handlebars AST, a subsequent invocation of `{{> @partial-block}}` compiles and executes that AST, enabling arbitrary JavaScript execution on the server. Version 4.7.9 fixes the issue. Some workarounds are available. First, use the runtime-only build (`require('handlebars/runtime')`). The `compile()` method is absent, eliminating the vulnerable fallback path. Second, audit registered helpers for any that write arbitrary values to context objects. Helpers should treat context data as read-only. Third, avoid registering helpers from third-party packages (such as `handlebars-helpers`) in contexts where templates or context data can be influenced by untrusted input.
4.7.9
Affected by 0 other vulnerabilities.
VCID-4rwg-63xq-d7da
Aliases:
GHSA-f52g-6jhx-586p
GMS-2020-728
Denial of Service in handlebars
4.4.5
Affected by 13 other vulnerabilities.
VCID-67n9-w7kp-4kg5
Aliases:
GHSA-2cf5-4w76-r9qv
GMS-2020-727
Arbitrary Code Execution in handlebars
4.5.2
Affected by 12 other vulnerabilities.
VCID-6cew-j5jr-euef
Aliases:
CVE-2019-20920
GHSA-3cqr-58rm-57f8
Handlebars before 3.0.8 and 4.x before 4.5.3 is vulnerable to Arbitrary Code Execution. The lookup helper fails to properly validate templates, allowing attackers to submit templates that execute arbitrary JavaScript. This can be used to run arbitrary code on a server processing Handlebars templates or in a victim's browser (effectively serving as XSS).
4.5.3
Affected by 9 other vulnerabilities.
VCID-cvg5-usxy-z3fm
Aliases:
GHSA-g9r4-xpmj-mj65
GMS-2020-729
Prototype Pollution in handlebars
4.5.3
Affected by 9 other vulnerabilities.
VCID-njfv-eyqc-n7bm
Aliases:
CVE-2021-23369
GHSA-f2jv-r9rf-7988
The package handlebars before 4.7.7 are vulnerable to Remote Code Execution (RCE) when selecting certain compiling options to compile templates coming from an untrusted source.
4.7.7
Affected by 8 other vulnerabilities.
VCID-r9ap-56yg-6bgw
Aliases:
CVE-2019-20922
GHSA-62gr-4qp9-h98f
Regular Expression Denial of Service in Handlebars
4.4.5
Affected by 13 other vulnerabilities.
VCID-rkqq-nxpd-nbee
Aliases:
GHSA-442j-39wm-28r2
Handlebars.js has a Property Access Validation Bypass in container.lookup ## Summary In `lib/handlebars/runtime.js`, the `container.lookup()` function uses `container.lookupProperty()` as a gate check to enforce prototype-access controls, but then discards the validated result and performs a second, unguarded property access (`depths[i][name]`). This Time-of-Check Time-of-Use (TOCTOU) pattern means the security check and the actual read are decoupled, and the raw access bypasses any sanitization that `lookupProperty` may perform. Only relevant when the **compat** compile option is enabled (`{compat: true}`), which activates `depthedLookup` in `lib/handlebars/compiler/javascript-compiler.js`. ## Description The vulnerable code in `lib/handlebars/runtime.js` (lines 137–144): ```javascript lookup: function (depths, name) { const len = depths.length; for (let i = 0; i < len; i++) { let result = depths[i] && container.lookupProperty(depths[i], name); if (result != null) { return depths[i][name]; // BUG: should be `return result;` } } }, ``` `container.lookupProperty()` (lines 119–136) enforces `hasOwnProperty` checks and `resultIsAllowed()` prototype-access controls. However, `container.lookup()` only uses `lookupProperty` as a boolean gate — if the gate passes (`result != null`), it then performs an independent, raw `depths[i][name]` access that circumvents any transformation or wrapped value that `lookupProperty` may have returned. ## Workarounds - Avoid enabling `{ compat: true }` when rendering templates that include untrusted data. - Ensure context data objects are plain JSON (no Proxies, no getter-based accessor properties).
4.7.9
Affected by 0 other vulnerabilities.
VCID-rynq-af1m-3kbr
Aliases:
CVE-2021-23383
GHSA-765h-qjxv-5f44
Prototype Pollution in handlebars
4.7.7
Affected by 8 other vulnerabilities.
VCID-s9pe-e4x4-2ybc
Aliases:
CVE-2026-33939
GHSA-9cx6-37pm-9jff
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, when a Handlebars template contains decorator syntax referencing an unregistered decorator (e.g. `{{*n}}`), the compiled template calls `lookupProperty(decorators, "n")`, which returns `undefined`. The runtime then immediately invokes the result as a function, causing an unhandled `TypeError: ... is not a function` that crashes the Node.js process. Any application that compiles user-supplied templates without wrapping the call in a `try/catch` is vulnerable to a single-request Denial of Service. Version 4.7.9 fixes the issue. Some workarounds are available. Wrap compilation and rendering in `try/catch`. Validate template input before passing it to `compile()`; reject templates containing decorator syntax (`{{*...}}`) if decorators are not used in your application. Use the pre-compilation workflow; compile templates at build time and serve only pre-compiled templates; do not call `compile()` at request time.
4.7.9
Affected by 0 other vulnerabilities.
VCID-ts65-xn5b-xkam
Aliases:
CVE-2026-33937
GHSA-2w6w-674q-4c4q
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.
4.7.9
Affected by 0 other vulnerabilities.
VCID-wavd-5xba-jqgn
Aliases:
CVE-2026-33941
GHSA-xjpj-3mr7-gcpf
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, the Handlebars CLI precompiler (`bin/handlebars` / `lib/precompiler.js`) concatenates user-controlled strings — template file names and several CLI options — directly into the JavaScript it emits, without any escaping or sanitization. An attacker who can influence template filenames or CLI arguments can inject arbitrary JavaScript that executes when the generated bundle is loaded in Node.js or a browser. Version 4.7.9 fixes the issue. Some workarounds are available. First, validate all CLI inputs before invoking the precompiler. Reject filenames and option values that contain characters with JavaScript string-escaping significance (`"`, `'`, `;`, etc.). Second, use a fixed, trusted namespace string passed via a configuration file rather than command-line arguments in automated pipelines. Third, run the precompiler in a sandboxed environment (container with no write access to sensitive paths) to limit the impact of successful exploitation. Fourth, audit template filenames in any repository or package that is consumed by an automated build pipeline.
4.7.9
Affected by 0 other vulnerabilities.
VCID-x839-p6g2-f3ca
Aliases:
CVE-2026-33916
GHSA-2qvq-rjwj-gvw9
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, `resolvePartial()` in the Handlebars runtime resolves partial names via a plain property lookup on `options.partials` without guarding against prototype-chain traversal. When `Object.prototype` has been polluted with a string value whose key matches a partial reference in a template, the polluted string is used as the partial body and rendered without HTML escaping, resulting in reflected or stored XSS. Version 4.7.9 fixes the issue. Some workarounds are available. Apply `Object.freeze(Object.prototype)` early in application startup to prevent prototype pollution. Note: this may break other libraries, and/or use the Handlebars runtime-only build (`handlebars/runtime`), which does not compile templates and reduces the attack surface.
4.7.9
Affected by 0 other vulnerabilities.
VCID-yjze-r3dm-wuhm
Aliases:
GHSA-q2c6-c6pm-g3gh
GMS-2020-730
Arbitrary Code Execution in handlebars
4.5.3
Affected by 9 other vulnerabilities.
Vulnerabilities fixed by this package (0)
Vulnerability Summary Aliases
This package is not known to fix vulnerabilities.

Date Actor Action Vulnerability Source VulnerableCode Version
2026-06-13T16:43:55.398532+00:00 GitLab Importer Affected by VCID-67n9-w7kp-4kg5 https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/GMS-2020-727.yml 38.6.0
2026-06-13T16:43:44.592761+00:00 GitLab Importer Affected by VCID-yjze-r3dm-wuhm https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/GMS-2020-730.yml 38.6.0
2026-06-13T16:43:26.216409+00:00 GitLab Importer Affected by VCID-cvg5-usxy-z3fm https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/GMS-2020-729.yml 38.6.0
2026-06-13T16:42:05.941125+00:00 GitLab Importer Affected by VCID-4rwg-63xq-d7da https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/GMS-2020-728.yml 38.6.0
2026-06-13T08:26:42.516109+00:00 GHSA Importer Affected by VCID-njfv-eyqc-n7bm https://github.com/advisories/GHSA-f2jv-r9rf-7988 38.6.0
2026-06-12T21:41:15.880346+00:00 GitLab Importer Affected by VCID-rkqq-nxpd-nbee https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/GHSA-442j-39wm-28r2.yml 38.6.0
2026-06-12T21:40:45.793214+00:00 GitLab Importer Affected by VCID-2vdk-f8x9-wqbb https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2026-33938.yml 38.6.0
2026-06-12T21:40:42.615639+00:00 GitLab Importer Affected by VCID-wavd-5xba-jqgn https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2026-33941.yml 38.6.0
2026-06-12T21:40:23.080849+00:00 GitLab Importer Affected by VCID-ts65-xn5b-xkam https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2026-33937.yml 38.6.0
2026-06-12T21:40:14.873841+00:00 GitLab Importer Affected by VCID-1wpr-wn5h-b3gy https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2026-33940.yml 38.6.0
2026-06-12T21:40:06.622551+00:00 GitLab Importer Affected by VCID-s9pe-e4x4-2ybc https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2026-33939.yml 38.6.0
2026-06-12T21:38:51.686675+00:00 GitLab Importer Affected by VCID-x839-p6g2-f3ca https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2026-33916.yml 38.6.0
2026-06-12T17:59:27.327363+00:00 GitLab Importer Affected by VCID-6cew-j5jr-euef https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2019-20920.yml 38.6.0
2026-06-12T17:59:20.663942+00:00 GitLab Importer Affected by VCID-r9ap-56yg-6bgw https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2019-20922.yml 38.6.0
2026-06-12T17:58:52.872424+00:00 GitLab Importer Affected by VCID-rynq-af1m-3kbr https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2021-23383.yml 38.6.0
2026-06-12T17:38:42.168827+00:00 GitLab Importer Affected by VCID-njfv-eyqc-n7bm https://gitlab.com/gitlab-org/advisories-community/-/blob/main/npm/handlebars/CVE-2021-23369.yml 38.6.0