Handlebars предоставляет пользователям возможность создавать семантические шаблоны. В версиях с 4.0.0 по 4.7.8 прекомпилятор Handlebars CLI (`bin/handlebars` / `lib/precompiler.js`) объединяет управляемые пользователем строки — имена файлов шаблонов и несколько параметров CLI — непосредственно в создаваемый им код JavaScript, без какого-либо экранирования или очистки. Злоумышленник, который может повлиять на имена файлов шаблонов или аргументы CLI, может внедрить произвольный код JavaScript, который выполняется при загрузке сгенерированного пакета в Node.js или браузер.
Версия 4.7.9 устраняет проблему. Доступны некоторые обходные пути. Во-первых, проверьте все входные данные CLI перед вызовом прекомпилятора.
Отклонять имена файлов и значения параметров, которые содержат символы с экранированием строк JavaScript (`", `'`, `;` и т. д.). Во-вторых, используйте фиксированную, доверенную строку пространства имен, передаваемую через файл конфигурации, а не аргументы командной строки в автоматических конвейерах. В-третьих, запускайте прекомпилятор в изолированной среде (контейнер без доступа на запись к конфиденциальным путям), чтобы ограничить влияние успешной эксплуатации.
В-четвёртых, проверяйте имена файлов шаблонов в любом репозитории или пакете, который используется автоматическим построить трубопровод.
Показать оригинальное описание (EN)
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.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Handlebarsjs Handlebars
cpe:2.3:a:handlebarsjs:handlebars:*:*:*:*:*:node.js:*:*
|
4.0.0
|
4.7.9
|