Приложение может принимать обычный HTTPS-трафик и при этом обрабатывать опасный ввод, если оно распаковывает предоставленные пользователем данные Brotli. 25 октября 2026 года Microsoft выпустила внеплановые обновления .NET для устранения переполнения буфера в декодере Brotli; уязвимость обозначена как CVE-2026-111497. Node.js включил исправление той же уязвимости в отдельный выпуск безопасности от 21 октября. Для разработчика первый шаг — найти путь от внешних данных до декодера, затем обновить рантайм и пересобрать или перезапустить приложение.

По описанию Microsoft, уязвимость .NET может позволить неаутентифицированному атакующему читать или повреждать память процесса, что способно привести к раскрытию данных, отказу в обслуживании или повышению привилегий. Исправления опубликованы для .NET 8, 9 и 10, а также .NET 11 Release Candidate 3. Для .NET 8 указаны runtime 8.0.33 и SDK 8.0.133 или 8.0.427. .NET Framework этой уязвимостью не затронут.
Где возникает экспозиция
Риск возникает, когда приложение передаёт недоверенный Brotli-поток уязвимому декодеру. В .NET это может происходить при использовании ASP.NET Core request decompression, автоматическом разжатии ответов через HttpClient или прямом вызове API из System.IO.Compression, например BrotliStream и BrotliDecoder. Рекомендация .NET перечисляет эти пути и указывает, что разжатие входящих запросов и автоматическое разжатие ответов по умолчанию выключены.
Инвентаризация пакетов — только начало проверки. Найдите конфигурации middleware и HTTP-клиентов, прямые вызовы декодера и сторонние компоненты, принимающие сжатые данные. Установите, поступают ли такие данные от клиентов, веб-хуков, прокси или внешних API, и какие ограничения размера и времени обработки стоят до распаковки. Это поможет определить, где уязвимый код получает контролируемые извне данные.
Обновление .NET
Установите обновление для используемой ветки: .NET 8 — 8.0.33, .NET 9 — 9.0.22, .NET 10 — 10.0.14; для .NET 11 — Release Candidate 3. Для framework-dependent приложений установите обновлённый runtime и перезапустите приложение. Self-contained-приложения нужно пересобрать и опубликовать заново: обновление runtime на хосте не заменяет копию, включённую в приложение. Контейнеры пересоберите и разверните на обновлённых образах .NET.
Для NativeAOT также используйте обновлённые SDK и runtime-пакеты при повторной публикации. Если исправление пока нельзя развернуть, временно отключите Brotli на выявленных входных путях, принимающих недоверенные данные. Проверьте обычные запросы и интеграции: отключение сжатия может изменить обработку клиентов, отправляющих сжатые тела.
Проверьте Node.js и системные зависимости
Проект Node.js сообщил об уязвимости 21 октября: затронут Brotli-декодер, встроенный в Node.js 22.x, 24.x и 26.x. Выпуск безопасности Node.js указывает исправленные версии 22.23.4, 24.22.1 и 26.12.1 соответственно. Обновите используемую поддерживаемую ветку и перезапустите сервис. По описанию проекта, проблема возникает, когда приложение распаковывает предоставленные атакующим данные с помощью node:zlib; повреждение памяти может привести к аварийному завершению, раскрытию памяти или удалённому выполнению кода.
Проверьте также зависимости, поставляемые отдельно от системного Node.js или .NET. Сверьте версии Brotli в контейнерах и артефактах сборки, затем повторите проверку после развертывания. В CI закрепите обновлённый базовый образ и включите контроль версий уязвимых библиотек в обычный процесс сборки.
Короткий порядок действий
- Составьте список приложений, SDK, runtime, контейнеров и NativeAOT-сборок, использующих Brotli.
- Найдите места, где внешние данные проходят через автоматическое или прямое декодирование.
- Обновите .NET, Node.js и отдельно поставляемые библиотеки до исправленных версий; пересоберите автономные приложения и контейнеры.
- Перезапустите процессы и проверьте версии в работающем окружении, а не только в файлах проекта.
- Пока исправление не развернуто, ограничьте обработку недоверенного Brotli-ввода на выявленных уязвимых путях.
Приоритет зависит от сочетания двух факторов: наличия уязвимого компонента и возможности передать ему специально сформированный сжатый поток. Обновление закрывает дефект, а карта входных путей помогает убедиться, что исправление дошло до процессов, автономных сборок и контейнеров.