Критическая ошибка в алгоритме сжатия Brotli от Google затронула множество популярных платформ для веб-разработки и облачной инфраструктуры. Дефект CVE-2026-111497 в декодере позволяет атаковать серверы без авторизации. Исследователи уже продемонстрировали выполнение произвольного кода в лабораторных условиях.
Масштаб проблемы оказался намного больше первоначальных прогнозов. Уязвимый компонент встроен в Node.js, Bun, библиотеки Python, прокси-сервер Envoy и платформу Istio для управления облачной инфраструктурой. Так как разные программные проекты используют один и тот же код декодера, обновление одной платформы не защищает остальные. Разработчики выпускают исправления поэтапно, полный список затронутых проектов ещё уточняется.
Brotli — алгоритм сжатия данных, разработанный Google и широко используемый для ускорения загрузки веб-страниц и передачи информации между серверами. Когда приложение получает сжатые данные, декодер восстанавливает исходное содержимое. Ошибка обнаружилась именно на этапе распаковки, где злоумышленник может воздействовать на память программы через поток специально подготовленных данных.
В основе дефекта лежит переполнение буфера. При обработке некорректного блока Brotli декодер ошибочно считает, что ему требуется дополнительная информация, и продолжает распаковку вместо остановки. Программа записывает поступающие байты за пределы внутреннего восьмибайтового буфера. Результат — потенциальный сбой, утечка содержимого памяти или выполнение кода злоумышленника.
Опасность зависит от того, обрабатывает ли приложение сжатые данные из недоверенного источника. Атака не требует учётных данных, но само наличие Brotli недостаточно — уязвимый компонент должен получить вредоносный поток и попытаться его распаковать. Такой сценарий возможен при обработке входящих HTTP-запросов, ответов сторонних серверов и других автоматически декодируемых данных.
Команда исследователей Imperva подтвердила возможность реального выполнения кода. Специалисты атаковали официальный образ Node.js 24.22.0 для Linux на архитектуре ARM64. Эксплойт срабатывал при обработке вредоносных HTTP-ответов через встроенную функцию fetch(), а также входящих запросов через Express 5 и body-parser 2. Для успешной атаки потребовалось несколько попыток, но результат — выполнение кода внутри серверного процесса.
Эксперимент не требовал изменения Node.js или использования отладочной сборки. Обычная версия платформы обрабатывала вредоносные данные без защиты. После установки исправленной Node.js 24.22.1 тот же поток Brotli отклонялся с ошибкой. При этом стандартный HTTP-сервер Node.js не распаковывает входящие данные Brotli автоматически — приложение должно задействовать соответствующий обработчик.
Разработчики Node.js выпустили исправления 21 октября 2026 года. Уязвимость закрыли в версиях 22.23.4, 24.22.1 и 26.12.1. Старые ветки, утратившие поддержку, обновлений не получат. Саму библиотеку Google Brotli исправили в версиях 1.0.10, 1.1.1 и 1.2.1. Уязвимые версии начинаются с 1.0.3, оценка серьёзности по CVSS 4.0 достигает 9,2 балла.
В экосистеме Python доступны исправленные версии пакетов Brotli и brotlicffi — 1.2.1 и 1.2.1.0 соответственно. Среда Bun обновила встроенную библиотеку Brotli до 1.2.1 в выпуске 1.4.4, закрыв уязвимость для версий начиная с 1.0.21. Облачная инфраструктура также требует внимания. Прокси-сервер Envoy, обрабатывающий и распределяющий сетевой трафик, использует тот же уязвимый декодер. Исправления вошли в версии 1.40.0, 1.39.3, 1.38.6, 1.37.8 и 1.36.12. Однако опасность возникает только при включённой распаковке Brotli, так что не каждое развёртывание Envoy автоматически подвержено атаке.
Аналогичное ограничение действует для Istio, платформы управления взаимодействием сервисов. Разработчики закрыли ошибку в версиях 1.31.2, 1.30.6 и 1.29.9. Последняя уже не получает поддержку. Администраторам, использующим распаковку Brotli через EnvoyFilter, рекомендуют перейти на исправленный поддерживаемый выпуск.
Для проверки собственных проектов специалисты Trail of Bits опубликовали инструмент Brotli Checker. Он находит потенциально уязвимые копии декодера в исходном коде, зависимостях, пакетах и контейнерах. Проверка особенно полезна, когда библиотека встроена непосредственно в приложение и обычное обновление системных пакетов не устраняет проблему.
Осложнение в том, что одна программа может содержать собственную копию Brotli, независимо от версии библиотеки в операционной системе. Администраторам недостаточно обновить общий пакет. Необходимо проверить используемые среды выполнения, контейнерные образы, зависимости и компоненты, которые принимают сжатые данные извне. Временно ограничить риск можно отключением распаковки недоверенных потоков Brotli там, где это не нарушит работу приложения.
Пока подтверждённые случаи выполнения кода относятся к исследовательским экспериментам. Сообщений о массовой эксплуатации CVE-2026-111497 на реальных серверах нет. Однако лабораторная демонстрация Imperva показывает, что угроза не ограничивается теоретическим повреждением памяти. Исправления уже доступны, дальше дело за разработчиками и администраторами затронутых систем.
Интерес вызывает способ обнаружения ошибки. Разработчики Node.js поблагодарили Хая Трана и Сильви Майер из команды OpenAI Codex Security, использовавшей инструменты искусственного интеллекта для поиска уязвимостей. Практически одновременно исследователи раскрыли две серьёзные ошибки в PHP под названием PHP2Shell с идентификаторами CVE-2026-109618 и CVE-2026-109619.
По мере обнаружения уязвимых реализаций за пределами Node.js появилось несколько названий — Node2Shell, HTTP2Shell, Brocolli2Shell и Brotlipocalypse. Все они относятся к одной ошибке CVE-2026-111497. Распространение уязвимости по нескольким программным экосистемам показывает, какие серьёзные последствия может иметь дефект в библиотеке, которую разработчики годами считали обычным вспомогательным компонентом.
