CVE-2026-106446 в Debian: обход проверки AST в Handlebars и выполнение кода — уязвимые версии и защита

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** — Опубликована первая версия материала.
 
Назад
Верх Низ