CVE-2026-33937

CRITICAL CVSS 3.1: 9,8 EPSS 0.43%
Обновлено 31 марта 2026
Handlebarsjs
Параметр Значение
CVSS 9,8 (CRITICAL)
Уязвимые версии 4.0.0 — 4.7.9
Устранено в версии 4.7.9
Тип уязвимости CWE-843 (Смешение типов), CWE-94 (Внедрение кода)
Поставщик Handlebarsjs
Публичный эксплойт Нет

Handlebars предоставляет пользователям возможность создавать семантические шаблоны. В версиях с 4.0.0 по 4.7.8 Handlebars.compile() принимает предварительно проанализированный объект AST в дополнение к строке шаблона. Поле value узла AST NumberLiteral передается непосредственно в сгенерированный код JavaScript без кавычек и очистки.

Таким образом, злоумышленник, который может предоставить созданный AST для `compile()`, может внедрить и выполнить произвольный JavaScript, что приведет к удаленному выполнению кода на сервере. Версия 4.7.9 устраняет проблему. Доступны некоторые обходные пути.

Проверьте тип ввода перед вызовом Handlebars.compile(); убедитесь, что аргумент всегда является строкой, а не простым объектом или десериализованным значением JSON. Используйте сборку Handlebars только во время выполнения («handlebars/runtime») на сервере, если шаблоны предварительно скомпилированы во время сборки; `compile()` будет недоступен.

Показать оригинальное описание (EN)

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.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1

Уязвимые продукты 1

Конфигурация От (включительно) До (исключительно)
Handlebarsjs Handlebars
cpe:2.3:a:handlebarsjs:handlebars:*:*:*:*:*:node.js:*:*
4.0.0 4.7.9