CVE: CVE-2026-106446
Продукт: Debian
Дата публикации: 06.10.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,64%; процентиль 49,05%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В пакете node-handlebars для Debian отслеживается CVE-2026-106446: функции Handlebars.compile() и Handlebars.precompile() в версиях с 4.0.0 до 4.7.10 принимают предварительно разобранные AST-объекты, проверяя лишь часть значений.
Атакующий, способный передать объект вместо строки шаблона, может внедрить JavaScript-выражения в непроверяемые поля AST и добиться выполнения кода в серверном процессе. Приложения, работающие только со строками шаблонов, не затронуты.
В Debian sid проблема решена пакетом 3:4.7.10-1; для bookworm, trixie и forky исправление на момент данных трекера не выпущено.
Основные характеристики
Суть риска: если приложение передаёт в Handlebars не строку шаблона, а готовый AST-объект, часть его значений попадает в сгенерированный JavaScript без проверки. Это позволяет выполнить произвольный код в процессе сервера.
Ключевые параметры:
- Тип ошибки: CWE-94 (внедрение кода) и CWE-843 (некорректный доступ к ресурсу по неверному типу).
- Критичность: 9,8 (CRITICAL) по CVSS 3.1, вектор
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H— атака по сети, без прав и взаимодействия с пользователем, полное влияние на конфиденциальность, целостность и доступность.
- Главное условие атаки: возможность передать AST-объект вместо строки шаблона; приложения, работающие только со строками, не затронуты.
- Исправление: версия Handlebars 4.7.10; в Debian sid — пакет
3:4.7.10-1.
- EPSS: 0,64%, процентиль 49,06% — расчётная вероятность эксплуатации в ближайшие 30 дней невысока, но метрика не гарантирует отсутствия атак.
- CISA KEV: подтверждения в каталоге нет.
Какие продукты и версии затронуты
Затронутый компонент — библиотека шаблонов Handlebars, версии с 4.0.0 до версии, предшествующей 4.7.10. В Debian уязвимость отслеживается в исходном пакете
node-handlebars.По данным Debian Security Tracker:
- bookworm: версия
3:4.7.7+~4.1.0-1, статус open, исправление не назначено.
- trixie: версия
3:4.7.7+~4.1.0-1, статус open, исправление не назначено.
- forky: версия
3:4.7.9-6, статус open, исправление не назначено.
- sid: версия
3:4.7.10-1, статус resolved — исправление выпущено.
Зарегистрирован баг Debian № 1150246. Приложения, передающие в компилятор только строки шаблонов, не затронуты.
Причина уязвимости
Уязвимость связана с тем, что
Handlebars.compile() и Handlebars.precompile() принимают не только строку шаблона, но и предварительно разобранный AST-объект. В версии 4.7.9 для CVE-2026-33937 была добавлена валидация AST, однако она охватывает только отдельные типы узлов: PathExpression, NumberLiteral и BooleanLiteral.Значения других узлов и полей остаются непроверенными. В описании прямо названы примеры:
Program.blockParams.length, параметр depth вне PathExpression, StringLiteral.value не строкового типа и PathExpression.original не строкового типа.Компилятор вставляет эти значения в генерируемый JavaScript как есть. Корень проблемы — неполнота покрытия валидации по типам узлов AST: атакующий размещает код в полях, которые валидатор не просматривает.
Как работает атака
Путь данных выглядит так: атакующий контролирует вход, который приложение передаёт в
compile() или precompile() в виде объекта AST, а не строки. Поскольку валидация 4.7.9 проверяет только выбранные типы узлов, атакующий формирует AST, где JavaScript-выражения размещены в непроверяемых значениях — например, в Program.blockParams.length, в нестроковом StringLiteral.value или PathExpression.original, либо в параметре depth вне PathExpression.Компилятор сериализует эти значения прямо в сгенерированный JavaScript-код. Когда результат компиляции рендерится (для
compile()) или когда загружается precompile-вывод (для precompile()), внедрённые выражения исполняются в серверном процессе.Итог — выполнение кода с привилегиями того процесса, который компилирует шаблон. Конкретные последствия (доступ к данным, дальнейшее закрепление) зависят от окружения и в источниках не детализированы.
Условия успешной эксплуатации
Подтверждённые условия из описания уязвимости:
- Уязвимая версия Handlebars от 4.0.0 до версии, предшествующей 4.7.10.
- Возможность передать в
Handlebars.compile()илиHandlebars.precompile()объект вместо строки шаблона.
- Внедрённые значения должны попасть в поля AST, не охваченные валидацией 4.7.9.
- Для исполнения кода compile-вывод должен быть отрендерен либо precompile-вывод должен быть загружен.
Приложения, работающие только со строками шаблонов, не затронуты. Детали о требуемых сетевых условиях в описании не раскрыты; вектор CVSS предполагает сетевую доступность точки входа, но это оценка, а не подтверждённый сценарий.
Возможный сценарий атаки
Разумный защитный сценарий (вывод на основе описания уязвимости, а не зафиксированная атака): веб-приложение на Node.js принимает от пользователя данные, которые конвертируются в AST и передаются в
compile() — например, при динамической генерации шаблонов или обработке сохранённых шаблонов из базы.Атакующий подготавливает AST-объект, в котором JavaScript-код размещён в полях, не охваченных валидацией 4.7.9. Приложение вызывает компиляцию, компилятор встраивает эти значения в генерируемый код, и при рендеринге код исполняется в серверном процессе.
Дальнейшие действия атакующего после получения исполнения кода в источниках не описаны; типичный риск — доступ к данным и внутренним ресурсам процесса, но это общий вывод, а не подтверждённый факт.
Есть ли публичный эксплойт
В доступных источниках нет сведений о публичном PoC, готовом эксплойте или подтверждённых атаках. Отсутствие таких данных не означает, что эксплойт невозможен: уязвимость имеет критический рейтинг и подробно описанную механику. Статус в CISA KEV не подтверждён, EPSS составляет 0,64%.
Признаки эксплуатации
Специфичные IOC (хэши, домены, характерные строки) в источниках не приведены. Неспецифичные точки контроля, применимые к этому классу уязвимости:
- Журналы приложений на предмет ошибок компиляции шаблонов и неожиданных исключений в
compile()/precompile().
- Аномальные входные данные, поступающие в функции компиляции в виде объектов, а не строк.
- Неожиданные дочерние процессы или исходящие соединения из процессов Node.js, обрабатывающих шаблоны.
Эти признаки неспецифичны и могут указывать на другие проблемы; рассматривайте их как общие точки наблюдения, а не подтверждённые индикаторы этой уязвимости.
Как обнаружить атаку
Для проверки подверженности системы в Debian сначала определите релиз:
cat /etc/debian_version
cat /etc/os-release
Код:
Затем проверьте версию пакета `node-handlebars`:
apt-cache policy node-handlebars
dpkg-query -W -f='${Package} ${Version}\n' node-handlebars
Сопоставьте полученную версию с данными Debian Security Tracker: версии Handlebars до 4.7.10 в составе пакета уязвимы. Дополнительно проверьте, какие приложения зависят от
node-handlebars и передают ли они в компиляцию AST-объекты — это определяет реальную эксплуатируемость.Как проверить свою версию
Проверка версии пакета в Debian:
apt-cache policy node-handlebars
dpkg-query -W -f='${Package} ${Version}\n' node-handlebars
Код:
Для контекста — версия самого Debian:
cat /etc/debian_version
cat /etc/os-release
Уязвимы версии Handlebars с 4.0.0 до 4.7.10; исправление — 4.7.10 (в sid пакет `3:4.7.10-1`).
## Исправление
Полное исправление — обновление Handlebars до версии 4.7.10. В Debian это реализовано в пакете `node-handlebars` версии `3:4.7.10-1`, доступной в sid. Исправление внесено через PR № 2185 апстрима handlebars.js и опубликовано в релизе v4.7.10.
Для стабильных ветвей Debian (bookworm, trixie, forky) исправление на момент данных трекера не выпущено — статус open. Рекомендуется:
- отслеживать [Debian Security Tracker](https://security-tracker.debian.org/tracker/CVE-2026-106446) и баг № 1150246;
- при возможности использовать пакет из sid или обновить зависимость до 4.7.10 через npm, если приложение управляет собственной копией библиотеки;
- проверить, передаёт ли приложение AST-объекты в компиляцию, и при возможности перейти на передачу только строк шаблонов.
## Временные меры защиты
Подтверждённых официальных обходных мер в источниках нет. Разумные защитные выводы на основе описания уязвимости:
- Не передавать в `Handlebars.compile()` и `Handlebars.precompile()` объекты AST из недоверенных источников — работать только со строками шаблонов (такие приложения не затронуты).
- Ограничить круг тех, кто может влиять на содержимое шаблонов, передаваемых в компиляцию.
- Изолировать процессы, компилирующие шаблоны, чтобы снизить последствия исполнения кода.
Эти меры снижают риск, но не заменяют обновление до 4.7.10.
## Как проверить устранение уязвимости
После установки исправления проверьте версию пакета:
dpkg-query -W -f='${Package} ${Version}\n' node-handlebars
apt-cache policy node-handlebars
Убедитесь, что версия соответствует `3:4.7.10-1` или выше (либо апстрим-версии 4.7.10+). Также проверьте статус в [Debian Security Tracker](https://security-tracker.debian.org/tracker/CVE-2026-106446): для вашего релиза статус должен быть resolved. Если приложение использует собственную npm-зависимость, проверьте её версию отдельно через менеджер пакетов проекта.
## Вывод
CVE-2026-106446 — критическая уязвимость обхода валидации AST в Handlebars, позволяющая выполнить код в серверном процессе при передаче недоверенного AST-объекта в компиляцию. В Debian sid исправление `3:4.7.10-1` уже выпущено, но в bookworm, trixie и forky статус остаётся open. Проверьте версию `node-handlebars`, оцените, передаются ли в компиляцию AST-объекты, и примените доступное обновление или временную меру — отказ от компиляции недоверенных AST.
## Официальные источники
1. [NVD — CVE-2026-106446](https://nvd.nist.gov/vuln/detail/CVE-2026-106446)
2. [Debian Security Tracker — CVE-2026-106446](https://security-tracker.debian.org/tracker/CVE-2026-106446)
3. [FIRST EPSS — CVE-2026-106446](https://api.first.org/data/v1/epss?cve=CVE-2026-106446)
## История обновлений статьи
- **08.10.2026** — Опубликована первая версия материала.
