HTTP2Shell в Brotli: критическая уязвимость затронула Node.js, Python и .NET
В библиотеке сжатия Brotli обнаружена критическая уязвимость HTTP2Shell с оценкой 9,2 из 10. Она затрагивает множество веб-приложений, включая проекты на Node.js, Python и .NET, поэтому администраторам рекомендуют без промедления установить исправления.
Разработчики Node.js, Microsoft, Google и сопровождающие Python-пакетов выпустили обновления для устранения критической уязвимости в Brotli — популярном алгоритме сжатия данных. Проблема получила название HTTP2Shell, а также встречается под именами Node2Shell и Broccoli2Shell. Ей присвоен идентификатор CVE-2026-111497 и рейтинг опасности 9,2 из 10.
Brotli — открытый алгоритм сжатия, созданный Google. Он уменьшает размер данных без потери информации и широко используется в интернете для передачи HTML, CSS и JavaScript. Поддержка Brotli есть у большинства браузеров, серверов и программных библиотек. Поэтому риск касается не одного продукта, а значительной части веб-инфраструктуры, где данные распаковываются на стороне приложения.
Чем опасна ошибка
HTTP2Shell представляет собой ошибку записи за пределами выделенной области памяти. По данным National Vulnerability Database, она вызывает переполнение буфера и потенциально позволяет раскрыть содержимое памяти процесса, вызвать отказ в обслуживании или, в отдельных сценариях, добиться удалённого выполнения кода.
В Node.js проблема связана с потоковым декодером Brotli в модуле node:zlib. Некорректный переключатель блока ошибочно воспринимался как временная необходимость получить ещё данные, а не как окончательная ошибка формата. В результате декодер продолжал добавлять байты во внутренний буфер размером восемь байт. Если атакующий способен передать приложению специально подготовленные данные Brotli для распаковки, это может привести к аварийному завершению процесса, раскрытию памяти или выполнению кода.
Уязвимость затрагивает ветки Node.js 22.x, 24.x и 26.x. Кроме того, в зоне риска находятся Python-пакеты Brotli и brotlicffi, HTTP-клиенты Requests, urllib3, httpx и aiohttp, а также приложения и развёртывания, использующие декодеры Brotli, включая Bun и Envoy. Microsoft также выпустила экстренное обновление для .NET: успешная эксплуатация в этой среде может привести к повышению привилегий.
Какие версии уже исправлены
Google устранила ошибку 21 октября 2026 года, выпустив Brotli 1.0.10, 1.1.1 и 1.2.1. Однако обновления самой библиотеки недостаточно, если программа поставляется со встроенной уязвимой версией или использует её как зависимость. В тот же день патчи вышли для Node.js, а исправленные пакеты для PyPI стали доступны 23 октября.
- Google Brotli: 1.0.10, 1.1.1 и 1.2.1;
- Node.js: 22.23.4, 24.22.1 и 26.12.1;
- Python Brotli: 1.2.1;
- Python brotlicffi: 1.2.1.0.
Что стоит сделать администраторам
Подтверждённых случаев вредоносной эксплуатации HTTP2Shell пока нет. При этом уже опубликован демонстрационный код: согласно доступным сведениям, он достигает выполнения кода только в намеренно ослабленной сборке, а на стандартных сборках вызывает сбой и ограниченное чтение памяти. Это не отменяет срочности обновлений, поскольку публичный PoC упрощает изучение атаки злоумышленниками.
Администраторам следует обновить все затронутые зависимости, перезапустить процессы и пересобрать с последующим развёртыванием контейнерные образы. Если немедленное обновление Python-приложения невозможно, временной мерой может стать удаление уязвимых пакетов Brotli и brotlicffi, а также необязательных зависимостей наподобие httpx[brotli]. Прокси, балансировщики нагрузки и WAF можно настроить на отклонение входящих запросов со сжатыми Brotli телами, но это не защитит приложения, которые скачивают и распаковывают вредоносные HTTP-ответы. Для Node.js полного обходного решения не заявлено.