Для кого эта статья: разработчики и администраторы, которые запускают веб-сервисы, API, краулеры или пакетные задания на Node.js, Bun, Python или .NET. Статья основана на публичной информации проекта Brotli от Google, Node.js, Microsoft, PyPI, JPCERT/CC и государственных источников США. Шаги атаки и код эксплойтов здесь не рассматриваются.
Развивающаяся ситуация: эта страница будет обновляться по мере публикации новых данных
По состоянию на 23:00 UTC 26 октября 2026 годаПока не известно
- Эксплуатируется ли уязвимость (первичные источники об этом не сообщают)
- Собственная оценка NVD (ожидает анализа)
- Полный список затронутых продуктов
- Некоторые дистрибутивы Linux (старые выпуски ещё не оценены)
Google опубликовал исправления 21 октября (по времени США), Node.js — в тот же день, Microsoft — 25 октября (по времени США). JPCERT/CC выпустила предупреждение 26 октября. В каталоге KEV CISA уязвимости нет. Другие поставщики ещё выпускают исправления, поэтому страница будет обновляться по мере их публикации.
Что сделать сегодня
Проверьте, распаковываете ли вы данные Brotli, полученные извне
Например, веб-сервер, распаковывающий запросы, отправленные с Content-Encoding: br, HTTP-клиент, автоматически распаковывающий ответы внешних сайтов, или код, распаковывающий файлы, загруженные пользователями. Если подходит хоть что-то из этого, считайте задачу срочной (мнение этого сайта).
Проверьте версии сред выполнения и пакетов
Командами из раздела «Как проверить, затронуты ли вы» ниже проверьте Node.js, Bun, пакеты Python, а также среду выполнения и SDK .NET.
Обновитесь до исправленной версии
Обновитесь как минимум до версий из раздела «Исправленные версии» ниже. Официальные сборки Node.js 20.x и старше с nodejs.org больше не поддерживаются и исправления не получат, поэтому перейдите на 22.x или новее. Для Node.js, установленного из пакетов Ubuntu или Debian, следуйте бюллетеню безопасности дистрибутива.
Пересоберите, заново разверните и перезапустите
Пересоберите с исправленными версиями образы контейнеров, исполняемые файлы, созданные через bun build --compile, а также самодостаточные и NativeAOT-приложения .NET, затем разверните их заново. Перезапустите и работающие процессы: старый процесс продолжает использовать загруженную старую библиотеку.
Проверьте признаки компрометации
JPCERT/CC просит не только установить исправления, но и проверить, не было ли компрометации. Обратите внимание на рост числа сбоев, незнакомые дочерние процессы или исходящие соединения у процессов, распаковывающих данные извне (рекомендация этого сайта).
Исправьте закрепления в lock-файлах и базовых образах
Если package-lock.json, requirements.txt, poetry.lock или строка FROM в Dockerfile закрепляют старую версию, следующая сборка вернёт её. Замените закрепления на исправленные версии.
Исправленные версии
| Что вы используете | Затронуто | Исправлено в | Источник |
|---|---|---|---|
| Brotli (библиотека на C) | 1.0.3–1.0.9, 1.1.0, 1.2.0 | 1.0.10, 1.1.1, 1.2.1 | |
| Node.js 22.x | до 22.23.4 | 22.23.4 | Node.js |
| Node.js 24.x | до 24.22.1 | 24.22.1 | Node.js |
| Node.js 26.x | до 26.12.1 | 26.12.1 | Node.js |
| Node.js 20.x и старше (официальные сборки nodejs.org) | поддержка завершена | нет (перейдите на 22.x или новее) | Node.js |
| Bun | от 1.0.21 до 1.4.4 (не включая 1.4.4) | 1.4.4 | Bun |
| PyPI brotli | от 1.0.3 до 1.2.1 | 1.2.1 | GitHub Advisory Database |
| PyPI brotlicffi | от 1.0.3 до 1.2.1.0 | 1.2.1.0 | GitHub Advisory Database |
| .NET 8 | до 8.0.33 | среда выполнения 8.0.33 (SDK 8.0.133, 8.0.427) | Microsoft |
| .NET 9 | до 9.0.22 | среда выполнения 9.0.22 (SDK 9.0.123, 9.0.320) | Microsoft |
| .NET 10 | до 10.0.14 | среда выполнения 10.0.14 (SDK 10.0.114, 10.0.403) | Microsoft |
| Envoy | v1.39.2, v1.38.5, v1.37.7, v1.36.11 | v1.40.0, v1.39.3, v1.38.6, v1.37.8, v1.36.12 | Envoy |
| Сборки PHP для Windows | 8.5.12, 8.4.27, 8.3.36, 8.2.35 до пересборки | 8.5.12-1, 8.4.27-1, 8.3.36-1, 8.2.35-1 | PHP |
.NET Framework не затронут (Microsoft). Исправление доступно и для предварительных версий .NET 11 (11.0.0-rc.3.26522.148). По данным Envoy, затронуты только развёртывания, в которых настроен распаковщик Brotli.
Дистрибутивы Linux часто переносят исправление (бэкпорт), не меняя номер исходной версии. Например, brotli в Ubuntu 22.04 исправлен в «1.0.9-2ubuntu0.1», где по-прежнему указано 1.0.9. Для пакетов ОС ориентируйтесь на бюллетень безопасности дистрибутива, а не только на номер версии.
По данным команды PHP, сборки PHP для Windows уязвимы через расширение cURL, когда включена автоматическая распаковка HTTP-ответов (в cURL она по умолчанию выключена, но приложения и библиотеки HTTP-клиентов могут её включать). Исправленные сборки имеют суффикс «-1»; сама версия PHP не меняется.
Библиотека ОС (libbrotli)
Исправляется обновлениями ОС. Перезапустите процессы, которые её используют
Встроена в среду выполнения (Node.js, Bun, .NET)
Обновите саму среду выполнения
Пакеты языка (brotli, brotlicffi)
Обновите в каждом виртуальном окружении
То, что вы собрали (контейнеры, исполняемые файлы)
Пересоберите с исправленными версиями и разверните заново
Как проверить, затронуты ли вы
Эти команды только проверяют версии в ваших собственных системах.
Node.js
Выполните node -v. Затронуты версии до 22.23.4, 24.22.1 или 26.12.1. node -p process.versions.brotli показывает версию встроенной Brotli, но в зависимости от способа исправления это число может не измениться, поэтому ориентируйтесь на версию самого Node.js (мнение этого сайта). Для Docker проверяйте внутри образа, например docker run --rm --entrypoint node <image> -v. Node.js, установленный из пакетов Ubuntu или Debian, использует системную libbrotli, поэтому проверяйте его, как описано в пункте «Библиотеки ОС» ниже.
Bun
Выполните bun --version. Затронуты версии до 1.4.4. Исполняемые файлы, созданные через bun build --compile, содержат Bun, которым они были собраны, и остаются уязвимыми до пересборки (бюллетень Bun).
Python
Выполните pip show brotli brotlicffi (или найдите Brotli и brotlicffi в выводе python -m pip list). Затронуты brotli до 1.2.1 и brotlicffi до 1.2.1.0. Если ни один из них не установлен, исправлять в Python по этой уязвимости нечего. У каждого виртуального окружения и контейнера своя копия, поэтому проверьте каждое. Если пакет установлен из ОС, например python3-brotli, ориентируйтесь на бюллетень безопасности дистрибутива, а не на номер версии.
.NET
Выполните dotnet --list-runtimes и dotnet --list-sdks. По данным Microsoft, вы уязвимы, если включили Brotli в распаковке запросов ASP.NET Core или в автоматической распаковке ответов HttpClient либо напрямую вызываете BrotliStream или BrotliDecoder. Ни один из автоматических вариантов не включён по умолчанию.
Библиотеки ОС
Проверьте установленную версию командой dpkg -l 'libbrotli*' в Debian и Ubuntu, rpm -qa 'brotli*' 'libbrotli*' в системах на базе RHEL или apk list --installed 'brotli*' в Alpine и сравните её с бюллетенем безопасности дистрибутива. Debian исправил Debian 12 в 1.0.9-2+deb12u1 (DLA-4855-1) и Debian 13 в 1.1.0-2+deb13u1 (DSA-6582-1).
Что было раскрыто
- CVE
- CVE-2026-111497 (бюллетень GitHub GHSA-9v8h-qqgm-4m35)
- Тип
- Запись за пределы буфера (CWE-787) и непроверяемое возвращаемое значение (CWE-252) в декодере Brotli (c/dec/decode.c)
- Серьёзность
- CVSS v4.0 9.2 (Google). Сетевой вектор атаки, без аутентификации, без участия пользователя, есть требования к атаке (AT:P). Microsoft оценивает проблему в .NET в 8.1 по CVSS v3.1
- Последствия
- Распаковка специально сформированного потока Brotli может повредить соседнюю память, раскрыть содержимое памяти, вызвать отказ в обслуживании или, потенциально, позволить выполнить произвольный код (описание Google в NVD). Для .NET Microsoft указывает, что это может привести к раскрытию информации, отказу в обслуживании или повышению привилегий (выполнение кода не упоминается)
- Затронуто
- Brotli 1.0.3–1.0.9, 1.1.0 и 1.2.0, а также продукты, в которые она встроена
- Исправлено
- Brotli 1.0.10, 1.1.1, 1.2.1 (21 октября 2026 года, по времени США)
- Обходной путь
- Google его не предлагает (JPCERT/CC). Microsoft советует не распаковывать данные Brotli, контролируемые злоумышленником, пока вы не сможете обновиться
По данным Node.js, декодер воспринимал недопустимое переключение блока в повреждённых данных не как ошибку формата, а как временную нехватку входных данных, и поэтому продолжал запись за концом внутреннего восьмибайтового буфера. В Node.js затронуты приложения, которые распаковывают данные Brotli от злоумышленника через node:zlib. Node.js оценивает проблему как High. В тех же выпусках исправлены ещё девять уязвимостей.
Согласно бюллетеню Bun, fetch в Bun по умолчанию автоматически распаковывает ответы Brotli, поэтому данные может подставить сервер, к которому подключается приложение, или злоумышленник на пути незашифрованного соединения.
Одного обновления ОС может не хватить
Brotli встроена в виде копии во многие программы, включая Node.js, Bun, пакеты Brotli для Python, .NET и Envoy. JPCERT/CC просит пользователей, чьи приложения распаковывают данные Brotli, проверить последнюю информацию каждого поставщика о влиянии и статусе исправлений. Microsoft также указывает, что обновление общей среды выполнения не исправляет NativeAOT-приложения: их нужно опубликовать заново.
Эксплуатация и доказательство концепции (PoC)
На утро 27 октября (по японскому времени) Google, Node.js, Microsoft и JPCERT/CC не сообщают об эксплуатации в реальных условиях. В каталоге KEV CISA (версия от 26 октября) уязвимости нет. Оценка SSVC от CISA, добавленная в NVD 23 октября, оценивает эксплуатацию как none, автоматизируемость как no, а техническое воздействие как total. В оценке CVSS от Microsoft зрелость кода эксплойта указана как unproven.
Первичные источники не упоминают публичного доказательства концепции. Один независимый сайт с разборами утверждает, что PoC был опубликован 22 октября: на стандартных сборках он вызывает только сбой и ограниченное чтение памяти, а на намеренно ослабленной сборке достигает выполнения кода. Тот же сайт утверждает, что исследовательская группа одной компании по безопасности добилась выполнения кода на официальном образе Node.js, не раскрыв метод. Этот сайт ничего из этого не проверял и не ссылается на эти материалы.
Ubuntu присваивает проблеме приоритет Medium, тогда как Google оценивает её в 9.2. Что важнее для вас, зависит от того, распаковываете ли вы данные, полученные извне (мнение этого сайта).
Об основных HTTP-библиотеках Python
На 27 октября requests, urllib3, httpx и aiohttp не опубликовали бюллетеней по этой уязвимости (этот сайт проверил список бюллетеней безопасности в каждом репозитории). urllib3, httpx и aiohttp рассматривают brotli или brotlicffi как необязательные дополнения (extras) и распаковывают Brotli, только если установлен один из них. Исправлять нужно brotli и brotlicffi в том же окружении. Обновление одной лишь HTTP-библиотеки не поможет, если brotli останется старым.
Что пока неизвестно
| Пункт | Статус |
|---|---|
| Эксплуатация в реальных условиях | Первичные источники не сообщают. Нет в KEV |
| Публичное доказательство концепции | Первичные источники не упоминают. Один независимый сайт утверждает, что оно есть (не проверено) |
| Оценка NVD | Ожидает анализа (есть только 9.2 от Google) |
| Полный список затронутых продуктов | Продолжает расти. Для браузеров и других продуктов проверяйте уведомления поставщиков |
| Дистрибутивы Linux | Ubuntu 20.04 и старше ещё не оценены |
Источники
Все проверены 27 октября 2026 года.
- JPCERT/CC, предупреждение о записи за пределы буфера в Brotli (CVE-2026-111497) (JPCERT-AT-2026-0034, 26 октября 2026 года, на японском) — jpcert.or.jp
- PHP, «Updated PHP Windows builds for Brotli security fix» (26 октября 2026 года) — php.net
- Выпуски Google Brotli v1.2.1, v1.1.1, v1.0.10 (21 октября 2026 года) — v1.2.1 / v1.1.1 / v1.0.10
- Node.js, «Node.js Security Releases» (21 октября 2026 года) — nodejs.org
- Microsoft, «Microsoft Security Advisory CVE-2026-111497 | .NET Brotli Decoder Out-of-bounds Write Vulnerability» (25 октября 2026 года) — github.com/dotnet
- GitHub Advisory Database GHSA-9v8h-qqgm-4m35 (PyPI brotli и brotlicffi) — github.com
- PyPI brotli 1.2.1 — pypi.org / brotlicffi 1.2.1.0 — pypi.org
- Bun, «Bundled brotli decoder has an out-of-bounds write» (GHSA-663w-cv8g-jj2p, 23 октября 2026 года) — github.com
- Envoy, «Out-of-Bounds Write in Brotli Decompressor» (GHSA-3wvj-j6qm-62mr, 23 октября 2026 года) — github.com
- NVD, «CVE-2026-111497» — nvd.nist.gov
- CISA, «Known Exploited Vulnerabilities Catalog» (нет в версии от 26 октября) — cisa.gov
- Ubuntu, «CVE-2026-111497» — ubuntu.com / Debian, «DLA-4855-1 brotli» — lists.debian.org
Журнал изменений
2026-10-27: первая версия, основанная на публичной информации Google, Node.js, Microsoft, Bun, Envoy, PHP, PyPI, JPCERT/CC, NVD, каталога KEV CISA, Ubuntu и Debian.
Читайте дальше
- Определение приоритетов: Как решить, какие CVE исправлять в первую очередь (CVSS, EPSS, KEV)
- Когда объявлена уязвимость: Руководство по устранению CVE
- Аудит зависимостей: Аудит зависимостей с OSV-Scanner
- Другое критическое исправление на той же неделе: Уязвимости PHP CVE-2026-109618 и CVE-2026-109619
- Другое обновление зависимостей Python в том же месяце: Сертификаты eMudhra: обновление pip, certifi и uv
- Термины: Что такое RCE (удалённое выполнение кода) / Что такое CVSS