Баг в Brotli нашли в феврале, исправление вышло только сейчас, и бьёт он далеко за пределы Node.js

Node.js раскрыл «Node2Shell», критическую уязвимость декодера Brotli. Потом её нашли в Python HTTP-клиентах, Bun, Envoy, Istio и curl.

Вкратце

CVE-2026-111497 (CVSS 9,2) позволяет созданному потоку Brotli вызвать запись за границы буфера. Работает это в обе стороны: злой сервер может атаковать клиента, а злой клиент — сервер.

Ветка спорила о названии. Вопрос, открыт ли HTTP на самом деле, упёрся в одну настройку.

Декодер, который не отличает «повреждённый поток» от «нужно больше данных»

Баг в Brotli нашли в феврале, исправление вышло только сейчас, и
Баг в Brotli нашли в феврале, исправление вышло только сейчас, и

По разбору Aikido, дефект сидит в библиотеке сжатия Brotli от Google, версии с 1.0.3 по 1.2.0. Функция DecodeBlockTypeAndLength() возвращает булево значение, которое не может отличить повреждённый поток от потока, которому нужно больше данных, а быстрый путь вообще игнорирует возвращаемое значение. Специально созданный поток может исчерпать длину блока и вынудить невозможное переключение блока, после чего декодер продолжает работать с устаревшим состоянием и пишет за границы буфера. Это может утечь данными, уронить процесс или выполнить код.

OpenAI сообщает, что нашла баг в феврале. Исправление тогда попало в исходники Brotli, но ни один релиз его не включил до сих пор.

Кто под ударом

  • Node.js через встроенный Brotli (исправлено в 22.23.4, 24.22.1, 26.12.1)
  • Python-клиенты, которые автоматически подгружают Brotli при установке: urllib3/requests, httpx, aiohttp, Scrapy (Brotli 1.2.1)
  • Bun 1.4.4, линии патчей Envoy и Istio, curl/libcurl и другие продукты, которые его вкладывают
  • По сообщениям, Apache и Nginx по умолчанию не затронуты, потому что Brotli по умолчанию не декодируют

Сканеры вроде pip-audit и Dependabot могут пока не помечать проблему. Пересоберите контейнерные образы после обновления. Если патч поставить нельзя, удалите Brotli, отклоняйте Content-Encoding: br и перестаньте объявлять br: одного изменения Accept-Encoding недостаточно.

Ветка: «можно было назвать Exploit Pro Max»

Большая часть обсуждения была о брендинге.

«Название ничего не значит, оно широкое и не описывает суть. Наверное, HTTP-сервер без ничего за ним не затронут, так зачем бить по HTTP?» — netsharc

Поправка пришла одной строкой.

«Затронут, если сервер готов распаковывать тела POST» — cowlevel

TZubiri, бэкенд-разработчик с более чем десятилетним опытом на C и Python, выдвинул циничную логику: HTTP2Shell цепляет всех, кто использует HTTP, а Brotli2Shell не поднимет тех, кому нужно патчить. Другой предложил более честное название.

«Просто назовите это CVE-2026-111497. Точнее, и легче запомнить и обсуждать с начальством» — rererereferred

Если ваш сервис принимает сжатые тела запросов, проверьте Brotli в дереве зависимостей и в базовых образах, прежде чем считать, что ваш edge-прокси вас закрывает.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 5 из 10 Читать дальше
🌍Other

Под дата-центр Google в Финляндии вырубили лес без экологической оценки, и страна в ярости

Сообщается, что около 250 000 деревьев вырубили под дата-центр Google в Финляндии без нужных разрешений. Комментаторы, которые следили за финскими новостями, сказали, что история масштабнее заголовка.

★ 248 · 💬 200 · nypost.com · 2 мин