CVE-2026-33939

HIGH CVSS 3.1: 7,5 EPSS 0.05%
Обновлено 31 марта 2026
Handlebarsjs
Параметр Значение
CVSS 7,5 (HIGH)
Уязвимые версии 4.0.0 — 4.7.9
Устранено в версии 4.7.9
Тип уязвимости CWE-754
Поставщик Handlebarsjs
Публичный эксплойт Нет

Handlebars предоставляет пользователям возможность создавать семантические шаблоны. В версиях с 4.0.0 по 4.7.8, когда шаблон Handlebars содержит синтаксис декоратора, ссылающийся на незарегистрированный декоратор (например, `{{*n}}`), скомпилированный шаблон вызывает `lookupProperty(decorators, "n")`, который возвращает `unопределённый`. Затем среда выполнения немедленно вызывает результат как функцию, вызывая необработанную ошибку `TypeError: ... is not a function`, приводящую к сбою процесса Node.js.

Любое приложение, которое компилирует предоставленные пользователем шаблоны без упаковки вызова в `try/catch`, уязвимо для отказа в обслуживании с одним запросом. Версия 4.7.9 устраняет проблему. Доступны некоторые обходные пути.

Оберните компиляцию и рендеринг в try/catch. Подтвердите ввод шаблона перед его передачей в `compile()`; отклонять шаблоны, содержащие синтаксис декораторов (`{{*...}}`), если декораторы не используются в вашем приложении. Используйте рабочий процесс предварительной компиляции; компилировать шаблоны во время сборки и обслуживать только предварительно скомпилированные шаблоны; не вызывайте `compile()` во время запроса.

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

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.

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

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

Последствия

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

Строка CVSS v3.1

Тип уязвимости (CWE)

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

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