Попытки эксплуатации декодера Brotli начались в первые сутки после раскрытия уязвимости

Попытки эксплуатации декодера Brotli начались в первые сутки после раскрытия уязвимости

В первые сутки после раскрытия уязвимости записи за границами буфера в декодере Brotli глобальная сеть приманок зафиксировала обращения, похожие на разведку и попытки эксплуатации. Подтверждённых случаев успешного применения в реальных системах в переданных данных нет: речь идёт о попытках. Уязвимость известна также под названиями Node2Shell и HTTP2Shell. Проект Node.js раскрыл её 21 октября 2026 года, запись CVE опубликована 22 октября.

Описание

Ошибка кроется в логике декодирования блоков. При смене типа блока декодер определяет следующий тип и длину, и в уязвимых версиях результат этой операции в быстром пути не проверяется. Декодирование продолжается в недопустимом состоянии, что приводит к записи за границами буфера. Уязвимыми в записи названы выпуски Google Brotli с 1.0.3 по 1.2.0 на всех платформах. К слабостям отнесены запись за границами буфера и отсутствие проверки возвращаемого значения, а оценка по CVSS 4.0 составляет 9.2 при том, что номер CVE назначила компания Google.

Сеть приманок Zscaler Deception за первые сутки после раскрытия зафиксировала 402 события с 20 адресов источников. По данным ThreatLabz, эти обращения были нацелены на приманки 12 клиентов. На разведку пришлось 40 процентов событий, а остальные 60 процентов относились к попыткам эксплуатации. Сеть приманок состоит из узлов, имитирующих рабочие системы, поэтому записи описывают обращения к ним, а не последствия в продуктивной инфраструктуре.

Отправленные данные различались по устройству. В одном наборе искажались заголовки сжатого потока, чтобы сопоставить ответы сервера на корректные и некорректные данные. В другом отправлялись усечённые JSON-документы, а также короткие последовательности, рассчитанные на запись за границами буфера. Отмечались и потоки, разворачивающиеся в объём, многократно превышающий размер запроса (бомба распаковки). Часть обращений шла в несколько этапов: сначала проверялся определённый путь, затем отправлялась вредоносная нагрузка.

Декодер Brotli входит в состав Node.js, Bun, привязок к языку Python, платформы .NET и прокси Envoy. Тот же декодер используют сервисная сетка Istio, библиотека для Java и системная библиотека libbrotli, которую применяют дистрибутивы Linux и клиент curl. Приложение оказывается под ударом, если передаёт сжатые данные, которыми управляет атакующий, уязвимому декодеру. Это возможно во входящем трафике, когда сервер сам распаковывает тело запроса, и в исходящем, когда клиент автоматически распаковывает ответ.

На исходящем направлении сжатый ответ возвращает сервер под контролем атакующего, а распаковывают его обработчики вебхуков, предпросмотр ссылок, обходчики сайтов и интеграции API. Декодер может быть встроен в приложение или в образ контейнера, и тогда версия системного пакета копию внутри приложения не описывает. В лаборатории Imperva выполнение кода воспроизвели в свежих контейнерах с официальным образом Node.js 24.22.0 для Linux arm64. В тестовой среде успех потребовал нескольких попыток.

Демонстрация в контролируемых условиях не подтверждает случаев выполнения кода в инфраструктуре других организаций. Для Brotli выпущены версии 1.0.10, 1.1.1 и 1.2.1, а также исправления для затронутых выпусков Node.js, Bun, .NET и других компонентов. Наблюдения через приманки показывают только сам факт обращений и не говорят, завершилась ли успехом хотя бы одна попытка. Вне поля зрения остаются системы, до которых такие запросы не доходили. Кроме того, признаки обращения к декодеру не отделяют вредоносный поток от повреждённого сжатого ответа, поэтому возможны ложные срабатывания.

Индикаторы компрометации

Комментарии: 0