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
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Handlebarsjs Handlebars
cpe:2.3:a:handlebarsjs:handlebars:*:*:*:*:*:node.js:*:*
|
4.0.0
|
4.7.9
|