Microsoft выпустила внеплановые обновления для .NET 8, 9, 10 и 11: они закрывают уязвимость Brotli в .NET с оценкой 8,1 балла из 10 по CVSS. Ошибка позволяет удалённому неаутентифицированному атакующему читать или повреждать память процесса через специально подготовленные сжатые данные. Для команд, которые принимают Brotli-трафик в API, прокси или веб-сервисах, это не тот патч, который разумно откладывать до следующего планового окна.
Как сообщает The Register, обновление вышло вне обычного графика Microsoft после раскрытия CVE-2026-111497. В бюллетене Microsoft вероятность эксплуатации оценена как «более вероятная». Публичных подтверждений успешных атак злоумышленников пока нет, хотя исследователи уже собрали рабочие эксплойты. Это неприятное сочетание: массового компрометационного шума ещё не слышно, но технический барьер для него уже заметно ниже.
Проблема находится в Brotli — библиотеке сжатия, созданной Google и встроенной во множество стеков. При обработке вредоносного Brotli-потока возможен выход за границы буфера. Последствия зависят от конкретного приложения и его окружения: утечка данных из памяти, отказ в обслуживании или повышение привилегий. Сам сжатый запрос не выглядит экзотикой: Brotli давно используется для передачи веб-контента и встречается в сервисах там, где разработчики могут вообще не думать о нём как об отдельной внешней зависимости.
Первыми о CVE-2026-111497 21 октября сообщили разработчики Node.js, одновременно исправив десять уязвимостей. Обнаружение они приписали Khai Tran и Sylvie Mayer из OpenAI Codex Security. Затем патчи выпустили Python и другие проекты; среди затронутых компонентов упоминаются Bun, Envoy и Istio. Причина широкого охвата проста: Brotli часто поставляется не как отдельный пакет, а как часть рантайма, прокси, библиотеки или образа контейнера. Поэтому обновить только один репозиторий недостаточно — нужно проследить всю цепочку поставки.
Есть и важная деталь, которую легко пропустить в потоке срочных бюллетеней. Исправление первопричины появилось в исходном коде Brotli ещё в феврале, но тогда его не классифицировали как проблему безопасности; нового релиза самой библиотеки после этого не было. Лишь в октябре стало ясно, что ошибка создаёт полноценный вектор атаки. Такой сценарий хорошо показывает слабое место зависимостей с «вшитым» кодом: исправление существует, но не доезжает до продуктов, пока не выйдут новые сборки каждого из них.
Где искать риск
Для .NET-команд приоритетны приложения, которые принимают внешние HTTP-запросы, работают за reverse proxy, развёрнуты в Kubernetes или используют готовые контейнерные образы. Обновления .NET закрывают уязвимость Brotli в .NET, но сами по себе не заменяют перезапуск сервисов и пересборку образов. Если рантайм уже присутствует внутри опубликованного образа, новая версия SDK на машине разработчика ничего не исправит в работающем кластере.
Исследовательница угроз Wiz Мерав Бар оценила, что уязвимые компоненты используются в 91% облачных сред, а публично доступные экземпляры Node.js есть в 82% облачных окружений. Эти цифры не означают, что уязвим каждый такой сервис: эксплуатируемость определяется версией компонента, путём доставки данных и настройками. Но они объясняют, почему инцидент быстро вышел за рамки одной экосистемы. Компрессия проходит через API-шлюзы, ingress-контроллеры, серверлесс-функции и сервисы доставки контента — ровно через те слои, которые компании редко инвентаризируют вручную.
Вектор не ограничивается HTTP. Исследователи JFrog показали вариант атаки на FFmpeg через специально сформированное изображение JPEG XL. В этой цепочке FFmpeg обращается к libjxl, а та распаковывает метаданные в блоках brob с помощью Brotli. Отдельно сообщалось о риске отказа в обслуживании для Apache Arrow. Практический вывод для инженеров неприятно банален: проверять нужно не только фронтенд, который сжимает ответы браузеру, но и обработчики файлов, медиапайплайны, очереди и внутренние сервисы, принимающие недоверенные данные.
Что сделать прямо сейчас
Microsoft рекомендует обновиться как можно быстрее. Минимальный рабочий план для владельца .NET-сервиса — определить используемую ветку рантайма, поставить актуальный патч, пересобрать контейнеры или артефакты развёртывания и перезапустить процессы. После этого полезно сверить фактические версии в production, а не только содержимое lock-файлов и CI-образов. Временно, пока обновление невозможно, OpenAI советует блокировать приём недоверенных Brotli-сжатых данных там, где это не ломает продукт.
Главный вопрос теперь не в том, появится ли ещё один патч, а в том, насколько быстро организации умеют находить библиотеку, скрытую внутри чужого бинарника или базового образа. Уязвимость Brotli в .NET — очередное напоминание, что SBOM, сканирование образов и проверка реально запущенных версий перестали быть отчётностью для аудита. Когда ошибка в кодеке добирается от веб-запроса до медиаконвейера, инвентаризация зависимостей становится частью защиты периметра.