Критическая уязвимость CVE-2026-111497 в декодере Brotli от Google продолжает вызывать волну экстренных обновлений. После первоначальных патчей для Node.js, Bun и Python-пакетов, о которых мы уже писали, 26 октября PHP пересобрал официальные Windows-пакеты, а Microsoft выпустила исправления для .NET, Visual Studio и PowerShell. Уязвимость позволяет повредить память и потенциально выполнить произвольный код через специально сформированные Brotli-данные. 27 октября CISA внесла уязвимость в каталог Known Exploited Vulnerabilities со сроком устранения до 10 ноября 2026 года.
Суть уязвимости и оценки критичности
CVE-2026-111497 — это ошибка записи за пределами буфера (out-of-bounds write) в декодере Brotli, затрагивающая версии библиотеки с 1.0.3 по 1.0.9, с 1.1.0 по 1.1.0 и версию 1.2.0. Эксплуатация может привести к аварийному завершению процесса, утечке содержимого памяти или удалённому выполнению произвольного кода.
Оценки критичности различаются в зависимости от методологии. Согласно GitHub Advisory Database, уязвимость получила 9,2 балла по шкале CVSS 4.0 (Critical). Red Hat оценивает её на 8,1 балла по CVSS 3.1 (Important), указывая на высокую сложность атаки — надёжная эксплуатация затруднена из-за аппаратных и программных механизмов защиты. Эти оценки используют разные версии CVSS и разные допущения, поэтому сравнивать их напрямую некорректно.
Уязвимость обнаружена исследователями, которых JFrog и Wiz идентифицируют как Khai Tran и Sylvie Mayer из OpenAI Codex Security, хотя прямого подтверждения от OpenAI в доступных источниках не найдено. Google исправила проблему в Brotli версий 1.2.1, 1.1.1 и 1.0.10.
Затронутые продукты и условия эксплуатации
Ключевой вывод из анализа обоих обновлений: уязвимость зависит от конфигурации, а не является универсальной. Каждый затронутый продукт имеет собственные условия, при которых вредоносные Brotli-данные достигают уязвимого декодера.
PHP на Windows
Согласно уведомлению PHP, уязвимый декодер доступен через расширение cURL при включённой автоматической декомпрессии HTTP-ответов. Сам cURL не включает эту функцию по умолчанию — её активируют приложения или HTTP-клиенты через опцию CURLOPT_ENCODING.
Однако библиотека Guzzle версий 7.16.1 и 8.3.1, согласно анализу её исходного кода, устанавливает CURLOPT_ENCODING в пустую строку по умолчанию при работе через cURL-обработчик. Пустое значение активирует все поддерживаемые форматы декомпрессии, включая Brotli. Это означает, что приложения, использующие Guzzle с настройками по умолчанию на предыдущих Windows-сборках PHP, соответствовали условиям для срабатывания уязвимости. Атака при этом приходит в виде специально сформированного сжатого ответа от сервера, к которому обращается PHP-приложение.
PHP выпустил пересобранные пакеты:
8.5.12-18.4.27-18.3.36-18.2.35-1
Эти сборки содержат тот же исходный код PHP, что и релизы от 21 октября (включая исправления PHP2Shell), но теперь включают Brotli 1.2.1. Поскольку версия PHP не изменилась, команда php -v покажет тот же номер. Отличить новую сборку можно по суффиксу -1 в имени файла и по SHA-256 хешу на странице загрузок.
Microsoft .NET
Согласно адвайзори Microsoft, исправления вошли в .NET версий 8.0.33, 9.0.22, 10.0.14 и .NET 11 Release Candidate 3. Обновления также получили Visual Studio 2019, 2022 и 2026, а также PowerShell 7.4, 7.5 и 7.6.
В .NET условия эксплуатации отличаются от PHP: ASP.NET Core и HttpClient не выполняют автоматическую Brotli-декомпрессию по умолчанию. Угроза возникает только если приложение явно включает декомпрессию запросов или ответов либо напрямую использует API Brotli для обработки данных из недоверенных источников.
Масштаб проблемы за пределами PHP и .NET
Brotli встроен во множество проектов, и обновления системной библиотеки недостаточно, если приложение поставляется с собственной копией декодера. По данным исследования JFrog, уязвимый декодер может быть задействован не только через HTTP-клиенты, но и через парсеры файлов, медиаинструменты и другие нативные интеграции. В частности, JFrog продемонстрировал цепочку эксплуатации через FFmpeg и специально подготовленное изображение JPEG XL, где библиотека libjxl использует Brotli для распаковки метаданных.
По данным Wiz, компоненты, уязвимые перед CVE-2026-111497, присутствуют в 91% облачных окружений, а в 82% таких сред есть публично доступные экземпляры Node.js. Эти цифры не были независимо подтверждены другими источниками, но отражают широкое распространение Brotli в контейнерных приложениях, кластерах Kubernetes, шлюзах API и реверс-прокси.
Статус эксплуатации
Подтверждённых случаев эксплуатации CVE-2026-111497 в реальных атаках пока не зафиксировано. Однако исследователи Imperva продемонстрировали рабочий PoC-эксплоит с удалённым выполнением кода на официальной сборке Node.js. Внесение уязвимости в каталог CISA KEV 27 октября со сроком устранения 10 ноября указывает на то, что регулятор считает угрозу достаточно серьёзной для обязательного реагирования.
Рекомендации
Для PHP на Windows: установите пересобранные пакеты с суффиксом -1 со страницы загрузок PHP. Если немедленное обновление невозможно, временная мера — отключить автоматическую Brotli-декомпрессию. В коде PHP это означает не устанавливать CURLOPT_ENCODING. В Guzzle — установить опцию запроса decode_content в false (это отключит декомпрессию всех форматов, включая gzip). Важно: простое удаление br из заголовка Accept-Encoding недостаточно — сервер всё равно может отправить Brotli-ответ.
Для .NET: обновите до версий 8.0.33, 9.0.22, 10.0.14 или .NET 11 RC3 соответственно. Проверьте, использует ли приложение явную Brotli-декомпрессию или прямые вызовы API Brotli.
Для всех платформ: инвентаризация должна выявлять не только версию пакета верхнего уровня, но и наличие встроенных или статически скомпонованных копий Brotli, а также пути, по которым недоверенные данные достигают декодера. Проекты, поставляющие собственную копию библиотеки, требуют отдельного обновления от разработчиков.
Учитывая внесение CVE-2026-111497 в CISA KEV с дедлайном 10 ноября и наличие публичных PoC-эксплоитов, обновление затронутых компонентов следует рассматривать как приоритетную задачу. Организациям, использующим PHP на Windows с Guzzle или другими HTTP-клиентами с автоматической декомпрессией, рекомендуется обновиться в первую очередь — именно в этой конфигурации условия эксплуатации выполняются по умолчанию.












