Критическая уязвимость в алгоритме сжатия Brotli от Google затронула сразу несколько популярных платформ для веб-разработки и облачной инфраструктуры. Ошибка CVE-2026-111497 позволяет атаковать серверы без авторизации, а исследователи уже продемонстрировали выполнение произвольного кода.
Проблема оказалась значительно масштабнее первоначальных предположений. Уязвимый декодер Brotli используют 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, а оценка серьёзности достигает 9,2 балла по CVSS 4.0.
Проблема затронула и экосистему Python. Для пакетов Brotli и brotlicffi, которые позволяют программам работать со сжатыми данными, доступны исправленные версии 1.2.1 и 1.2.1.0 соответственно. Среда выполнения JavaScript Bun устранила уязвимость в выпуске 1.4.4, обновив встроенную библиотеку Brotli до 1.2.1. Ранее проблема затрагивала версии Bun начиная с 1.0.21.
Для облачной инфраструктуры последствия могут оказаться не менее серьёзными. Прокси-сервер Envoy, который обрабатывает и распределяет сетевой трафик, также использует уязвимый декодер. Исправления вошли в версии 1.40.0, 1.39.3, 1.38.6, 1.37.8 и 1.36.12. Однако опасность возникает только в конфигурациях с включённой распаковкой Brotli, поэтому не каждое развёртывание Envoy автоматически подвержено атаке.
Аналогичное ограничение действует для Istio, платформы управления взаимодействием сервисов в облачной инфраструктуре. Разработчики закрыли CVE-2026-111497 в версиях 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.
На фоне PHP2Shell новая проблема первоначально получила название Node2Shell. По мере обнаружения уязвимых реализаций за пределами Node.js появились другие обозначения, включая HTTP2Shell, Brocolli2Shell и Brotlipocalypse. Все названия относятся к одной ошибке CVE-2026-111497. Распространение уязвимости сразу по нескольким программным экосистемам показывает, насколько серьёзные последствия может иметь дефект в библиотеке, которую разработчики годами воспринимали как обычный вспомогательный компонент.