Подробный разбор · Около 6 мин чтения
Раскрытие уязвимости декодера Brotli: исправление должно попасть в каждую работающую копию
Node.js описывает CVE-2026-111497. Руководство по развёртыванию перечисляет исправления зависимых проектов и временные меры с важными ограничениями по декодированию и срокам поддержки.
- Опубликовано здесь
- Дата источника
- Источник проверен
Node.js документирует CVE-2026-111497, о которой сообщила команда OpenAI Codex Security, а PatchthePlanet перечисляет исправления зависимых проектов и временные меры. Этот случай показывает разрыв между исправлением общей библиотеки и защитой уже развёрнутого ПО. Подверженность угрозе зависит от того, попадают ли недоверенные данные в уязвимый декодер; само использование Brotli не доказывает уязвимость каждой развёрнутой системы.
Слушать новости
Прослушайте эту статью или включите новости подряд.
Подготовка чтения…
Голос устройства
Речь обрабатывает браузер или устройство. AISubHub не отправляет текст в аудио-API. Доступные голоса и работа при заблокированном экране зависят от устройства.
При продолжении короткая фраза может повториться.
Кратко
- Node.js указывает исправления в 22.23.4, 24.22.1 и 26.12.1; ошибка может повредить память, когда приложение распаковывает Brotli-данные, предоставленные злоумышленником.
- Руководство по развёртыванию перечисляет исправления Bun, Envoy, Istio и исходного проекта Brotli, но предупреждает: исправленный выпуск неподдерживаемой ветки не становится поддерживаемым путём обновления.
- Временные меры должны блокировать недоверенные Brotli-данные до декодирования на всех соответствующих путях. Отключить сжатие исходящих данных или только убрать br из Accept-Encoding недостаточно.
Раскрытие уязвимости и даты источников
В рекомендациях Node.js авторами сообщения об уязвимости Brotli названы Khai Tran и Sylvie Mayer из OpenAI Codex Security, а авторами исправления — mcollina и aduh95. Руководство PatchthePlanet по развёртыванию сопоставляет затронутое ПО с выпусками и временными мерами. Практический анализ AISubHub состоит в том, что защита должна пройти цепочку выпусков компонентов, встроенных сред выполнения, пересобранных приложений и реально работающих систем пользователей; установка одного пакета сама по себе не доказывает завершения работ.
Заголовок страницы Node.js относится к выпускам безопасности от 21 октября, но дата добавления каждого пункта CVE не указана. Пометка PatchthePlanet «Обновлено 23 октября» не является временем первоначальной публикации. Эти даты не устанавливают, когда все исправления зависимых проектов дошли до пользователей. AISubHub изучил эти общедоступные материалы 24 октября; дата доступа отличается от даты в заголовке страницы выпуска или пометки об обновлении.
Как восемь байт становятся источником опасности
Node.js объясняет, что некорректное переключение блока воспринималось как временная потребность в дополнительных входных данных, а не как окончательная ошибка формата. Потоковый декодер продолжал добавлять байты во внутренний буфер размером восемь байт и мог записывать данные за его пределами. Если приложение распаковывает через node:zlib данные, контролируемые злоумышленником, возможны аварийное завершение, раскрытие содержимого памяти или удалённое выполнение кода.
Значимая граница — декодирование недоверенных входных данных: тел запросов, ответов недоверенных серверов и сжатых файлов. Одно лишь сжатие исходящих данных не доказывает подверженность угрозе. Руководство также обращает внимание на встроенные среды выполнения, curl/libcurl, привязки Python или Java, декодеры шрифтов и средства чтения файлов. Приложение Electron может содержать отдельные копии Chromium и Node.js; исправление одной не доказывает, что исправлены обе.
Выбирайте поддерживаемый выпуск компонента
Node.js называет 22.23.4, 24.22.1 и 26.12.1. PatchthePlanet указывает Bun 1.4.4, включающий Brotli 1.2.1, а также версии исходной библиотеки Brotli 1.0.10, 1.1.1 и 1.2.1 для соответствующих веток. Это выпуски отдельных компонентов, а не единый номер версии, исправляющий все приложения со встроенным декодером.
То же руководство перечисляет Envoy 1.40.0, 1.39.3, 1.38.6 и 1.37.8. Envoy 1.36.12 тоже содержит исправление, но эта ветка не поддерживается. Исправления Istio доступны в 1.29.9, 1.30.6 и 1.31.2; срок поддержки 1.29 завершён. В обоих исключениях важно выбирать поддерживаемый путь обновления, а не приравнивать наличие исправления к продолжающемуся сопровождению.
Блокируйте данные до декодирования
Если немедленно установить исправление невозможно, PatchthePlanet рекомендует временно отключить декодирование недоверенных данных Brotli. Пример для Express перед всеми обработчиками тела запроса разрешает только identity, gzip и deflate, отклоняя другие или последовательно наложенные кодирования с HTTP 415. Прокси, который декодирует данные раньше, нуждается в собственной защите. Запасной вариант inflate:false отклоняет все сжатые тела запросов, включая gzip и deflate.
Для получаемых ответов удаление br из Accept-Encoding выражает лишь предпочтение: сервер всё равно может прислать Brotli. Пример Python откладывает чтение и декодирование тела до проверки Content-Encoding. В этом примере отключены перенаправления и повторные попытки; при их добавлении придётся проверять каждый ответ. Обычный fetch или автоматическое чтение могут декодировать данные до того, как приложение проверит заголовки. Одни ограничения размера и правила WAF не охватывают все пути.
Область действия временных мер ограничена
Для Envoy и Istio руководство отключает распаковщик Brotli в обоих направлениях, удаляет переопределения времени выполнения, способные включить его снова, и предупреждает, что неуказанное направление по умолчанию включено. Отдельные фильтры gzip или zstd следует сохранить; общее имя фильтра не служит причиной удалять их все. Закодированные байты могут передаваться дальше, поэтому декодеры приложений по-прежнему требуют защиты.
Временная мера для Next.js — глобально установить images.unoptimized, затем заново собрать и развернуть приложение и проверить, что /_next/image больше не запускает встроенный оптимизатор. Это не защищает пользовательские загрузчики, другие серверные запросы за данными или иные декодеры. В Istio необходимо проверять действующую конфигурацию каждого шлюза и каждого sidecar-прокси; изменение одного файла не доказывает, что изменились все работающие экземпляры.
Проверяйте реально работающую систему
Руководство требует обновить закреплённые версии сред выполнения и образов, пересобрать включающие их контейнеры или исполняемые файлы, перезапустить либо заново развернуть сервисы, рабочие процессы, запланированные задания и реплики. Работающий двоичный файл или образ нужно сопоставить с соответствующим исправленным выпуском. Скачанное исправление, обновлённый узел сборки или исправленный компонент браузера не доказывают, что каждый процесс использует исправленный декодер.
В гипотетическом примере AISubHub сеть CDN может сжимать исходящие ответы, а отдельный рабочий процесс — декодировать загруженное содержимое. Отключение сжатия CDN не изменит подверженность этого процесса угрозе; альтернативный путь к исходному серверу тоже может обойти защиту прокси. Это архитектурный пример, а не результат проверки наших серверов. Проверка должна охватывать соответствующие пути и подтверждать, что разрешённые способы сжатия продолжают работать.
Почему это важно
Практический вывод — составить перечень мест, где происходит декодирование, и довести исправления исходного проекта до пересобранных и реально работающих систем. Проверка версий и временные ограничения решают разные задачи; ни название общей библиотеки, ни одно изменение конфигурации не доказывают защищённость всех экземпляров.
Ограничения и доступность
Мы изучили два общедоступных руководства, но не код эксплуатации, не все связанные примечания к выпускам и не развёрнутые системы клиентов. Данные о версиях, кроме Node.js, приведены по проверке PatchthePlanet от 23 октября. Мы не эксплуатировали уязвимость, не обновляли среду выполнения и не проводили аудит серверов. Эти материалы не подтверждают ни массовых атак, ни устранения проблемы повсеместно.
Источники и подтверждения
Дата источника: · Источник проверен:
Дополнительные материалы
Материалы подготовлены с помощью ИИ и сверены с указанными первоисточниками. Заявления поставщиков атрибутированы; публикация не означает рекомендацию.