CVE-2026-33938

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

Handlebars предоставляет пользователям возможность создавать семантические шаблоны. В версиях с 4.0.0 по 4.7.8 специальная переменная `@partial-block` хранится в контексте данных шаблона и доступна и изменяема изнутри шаблона через помощники, которые принимают произвольные объекты. Когда помощник перезаписывает `@partial-block` созданным AST Handlebars, последующий вызов `{{> @partial-block}}` компилирует и выполняет этот AST, разрешая произвольное выполнение JavaScript на сервере.

Версия 4.7.9 устраняет проблему. Доступны некоторые обходные пути. Во-первых, используйте сборку только во время выполнения (`require('handlebars/runtime')`).

Метод `compile()` отсутствует, что исключает уязвимый запасной путь. Во-вторых, проверьте зарегистрированные помощники на предмет тех, которые записывают произвольные значения в объекты контекста. Помощники должны рассматривать данные контекста как доступные только для чтения.

В-третьих, избегайте регистрации помощников из сторонних пакетов (таких как «handlebars-helpers») в контекстах, где на шаблоны или данные контекста могут влиять ненадежные входные данные.

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

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.

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

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

Последствия

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

Строка CVSS v3.1

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

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