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.122.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

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