Broccoli2Shell / Node2Shell / HTTP2Shell: объяснение CVE-2026-111497

Краткий обзор

Broccoli2Shell (также известная как Node2Shell и HTTP2Shell) соответствует CVE-2026-111497 – критической уязвимости записи за пределами памяти с оценкой 9.2 по CVSS v4.0, обнаруженной в библиотеке декомпрессии Google Brotli.

Технология Brotli интегрирована в ряд приложений и платформ, среди которых Node.js, пакеты Python, Bun, .NET, Envoy и Istio. Приложения становятся уязвимыми в случае использования подверженной версии для распаковки данных, полученных из непроверенных источников.

Уязвимость позволяет перезаписывать память процесса с помощью специально сформированных сжатых данных. Учитывая специфику приложения и его настройки, злоумышленники способны эксплуатировать эту уязвимость для выведения сервиса из строя, доступа к чувствительным данным или выполнения кода без предварительной аутентификации. Компрометация может произойти через сжатые входящие запросы или ответы, загружаемые приложениями с внешних серверов.

Рекомендуется осуществить проверку приложений и зависимостей, установить выпущенные производителями обновления и перезагрузить сервисы, подвергшиеся воздействию.

Уязвимые продукты и исправленные версии

ПродуктУязвимые предыдущие выпускиПервый исправленный выпуск
Brotli1.0.3–1.0.9, 1.1.01.0.10, 1.1.1, 1.2.1
Node.jsПоддерживаемые ветки 22.x до 22.23.4; 24.x до 24.22.1; 26.x до 26.12.1 22.23.4; 24.22.1; 26.12.1. Ветки без поддержки не получили обновлений безопасности.
PythonВерсии до 1.2.11.2.1
.NET8.x до 8.0.33; 9.x до 9.0.22; 10.x до 10.0.14; уязвимые предварительные выпуски 11 до RC 38.0.33; 9.0.22; 10.0.14; 11.0.0-rc.3.26522.148. .NET Framework не подвергся воздействию.
BunПосле 1.0.21 и до 1.4.41.4.4
Envoy ProxyВ рекомендациях указаны 1.36.11, 1.37.7, 1.38.5 и 1.39.2; для эксплуатации требуется настроенный декомпрессор Brotli1.36.12; 1.37.8; 1.38.6; 1.39.3; 1.40.0
Istio1.29.0–1.29.8; 1.30.0–1.30.5; 1.31.0–1.31.1, если включена декомпрессия Brotli1.29.9; 1.30.6; 1.31.2
Brotli4jВсе версии до 1.23.0, включая связанные нативные артефакты1.24.0
ClickHouseСборки, содержащие ответвление Brotli 1.2.0; опубликованный выпуск 26.10.2.103 предшествует слиянию исправленияВыпуск с исправлением еще не опубликован
DuckDBСборки, содержащие вендорную версию Brotli 1.1.0, включая актуальный на тот момент выпуск 2.0.0Выпуск с исправлением еще не опубликован
Apache ArrowArrow 26.0.0 закрепляет Brotli 1.0.9 при сборке с этой встроенной зависимостьюВыпуск с исправлением еще не опубликован

Рекомендации Cynet по реагированию и расследованию

Специалисты Cynet Research осуществляют активное расследование Broccoli2Shell (CVE-2026-111497), проводя мониторинг техник эксплуатации, обнародованных индикаторов и зафиксированной вредоносной активности для оценки рисков для заказчиков и информационного обеспечения защитных мер.

Команда CyOps MDR от Cynet отслеживает в средах клиентов и партнеров подозрительную активность, которая может свидетельствовать о потенциальной эксплуатации. К такой активности относятся непредвиденный запуск shell, аномальные дочерние процессы и сомнительные исходящие подключения от приложений, которые могут использовать подверженный декодер Brotli. Выявленные данные являются основой для дальнейшего расследования и мер реагирования.

Платформа Cynet EPP предоставляет возможность контролировать процессы на отслеживаемых конечных точках, что позволяет специалистам CyOps и клиентам анализировать события, которые предшествовали подозрительному выполнению и происходили после него. В контексте вероятных инцидентов с Broccoli2Shell такая видимость позволяет проследить цепочку действий от подверженного приложения до последующего запуска команд, инструментов или полезных нагрузок, значительно облегчая оценку масштабов компрометации и организацию реагирования.

Хронология раскрытия

Февраль 2026 года

Исправление впервые появляется в исходном коде Brotli, согласно анализу OpenSourceMalware.

21 октября 2026 года

Выпущены версии Node.js 22.23.4, 24.22.1 и 26.12.1. Google выпускает Brotli 1.0.10, 1.1.1 и 1.2.1.

23 октября 2026 года

Brotlicffi 1.2.1.0 появляется на PyPI. Исследователи публикуют анализ влияния на Python, а GitHub добавляет пакеты PyPI в свой бюллетень безопасности.

Детали уязвимости

Brotli – это формат сжатия без потерь, который используется, среди прочего, для контента HTTP, закодированного как br. Уязвимость CVE-2026-111497 содержится в его декодере C. Функция DecodeBlockTypeAndLength() обрабатывает изменение типа блока во время декомпрессии; запись за пределами выделенной памяти происходит позже в функции BrotliDecoderDecompressStream().

Когда поток объявляет не более одного типа блока, но достигает переключения блока, функция DecodeBlockTypeAndLength() возвращает BROTLI_FALSE. В уязвимых версиях это значение также означает недостаточный объем входных данных. Поэтому потоковый декодер расценивает невозможное переключение как запрос на дополнительный байт и повторяет попытку вместо того, чтобы отклонить поток. Исправление изменяет тип возвращаемого значения с BROTLI_BOOL на BrotliDecoderErrorCode, добавляет отдельную ошибку формата переключения блока и обеспечивает ее передачу вызывающим функциям.

Во время каждой повторной попытки BrotliDecoderDecompressStream() может добавлять предоставленный злоумышленником байт в восьмибайтовый временный буфер без эффективной проверки границ в выпущенной сборке. Как только индекс достигает восьми, запись переходит в соседнее поле buffer_length, которое контролирует дальнейшее индексирование. Повреждение этого состояния может сделать возможными дальнейшие записи, и, при наличии соответствующих условий для эксплуатации, выполнение кода зависит от компоновки памяти.

Рекомендации

Компания Cynet рекомендует немедленно выявить и обновить любые развертывания продуктов, подвергшихся влиянию Broccoli2Shell (отслеживается как CVE-2026-111497). Эта критическая уязвимость во время выполнения может дать доступ для удаленного выполнения кода без аутентификации. Продукты без установленных исправлений необходимо немедленно обновить до соответствующего исправленного выпуска или более новой поддерживаемой версии.

Согласно информации от patchtheplanet, организации, которые не могут безотлагательно установить обновления, имеют возможность применить следующие меры для снижения рисков до момента развертывания исправления:

  • Входящие запросы: отклонять запросы с Content-Encoding: br до того, как любой прокси-сервер, промежуточное программное обеспечение (middleware) или парсер тела запроса декомпрессирует их. Это должно охватывать прямые маршруты к источнику и альтернативные маршруты.
  • Полученные ответы: отключить автоматическую декомпрессию Brotli в клиентах HTTP. Отклонять ответы Brotli перед декодированием; если клиент не может этого сделать, необходимо приостановить уязвимый процесс получения данных или использовать клиент с исправлением. Одно лишь удаление br из заголовка Accept-Encoding не препятствует серверу отправлять его.
  • Envoy Proxy и Istio: отключить фильтры декомпрессора Brotli как для запросов, так и для ответов. Отключение фильтра может привести к передаче сжатых данных дальше, поэтому декодеры на последующих этапах также нуждаются в защите.
  • Файлы и другие входные данные: приостановить обработку ненадежных данных Brotli до момента установки исправления для декодера.

Получить пробную версию Cynet

Подписаться на новости