Руководства по безопасности

Уязвимость Brotli CVE-2026-111497 (Node2Shell): как проверить Node.js, Python и .NET и что обновить

CVE-2026-111497 — запись за пределы буфера в декодере Brotli. Затронуты Brotli 1.0.3–1.0.9, 1.1.0 и 1.2.0, копии которых есть в Node.js, Bun, пакетах Python и .NET. Как проверить, исправленные версии и почему обновления ОС может не хватить.

Опубликовано 2026-10-27 Обновлено 2026-10-27 Последняя проверка 2026-10-27 12 мин чтения
На этой странице

Для кого эта статья: разработчики и администраторы, которые запускают веб-сервисы, 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 уязвимости нет. Другие поставщики ещё выпускают исправления, поэтому страница будет обновляться по мере их публикации.

Что сделать сегодня

1

Проверьте, распаковываете ли вы данные Brotli, полученные извне

Например, веб-сервер, распаковывающий запросы, отправленные с Content-Encoding: br, HTTP-клиент, автоматически распаковывающий ответы внешних сайтов, или код, распаковывающий файлы, загруженные пользователями. Если подходит хоть что-то из этого, считайте задачу срочной (мнение этого сайта).

2

Проверьте версии сред выполнения и пакетов

Командами из раздела «Как проверить, затронуты ли вы» ниже проверьте Node.js, Bun, пакеты Python, а также среду выполнения и SDK .NET.

3

Обновитесь до исправленной версии

Обновитесь как минимум до версий из раздела «Исправленные версии» ниже. Официальные сборки Node.js 20.x и старше с nodejs.org больше не поддерживаются и исправления не получат, поэтому перейдите на 22.x или новее. Для Node.js, установленного из пакетов Ubuntu или Debian, следуйте бюллетеню безопасности дистрибутива.

4

Пересоберите, заново разверните и перезапустите

Пересоберите с исправленными версиями образы контейнеров, исполняемые файлы, созданные через bun build --compile, а также самодостаточные и NativeAOT-приложения .NET, затем разверните их заново. Перезапустите и работающие процессы: старый процесс продолжает использовать загруженную старую библиотеку.

5

Проверьте признаки компрометации

JPCERT/CC просит не только установить исправления, но и проверить, не было ли компрометации. Обратите внимание на рост числа сбоев, незнакомые дочерние процессы или исходящие соединения у процессов, распаковывающих данные извне (рекомендация этого сайта).

6

Исправьте закрепления в lock-файлах и базовых образах

Если package-lock.json, requirements.txt, poetry.lock или строка FROM в Dockerfile закрепляют старую версию, следующая сборка вернёт её. Замените закрепления на исправленные версии.

Исправленные версии

9.2
CVSS v4.0 (оценка Google)
1.0.3–1.0.9, 1.1.0, 1.2.0
Затронутые версии Brotli
Нет в списке
CISA KEV (утро 27 октября по японскому времени)
Не сообщается
Эксплуатация (первичные источники)
Что вы используетеЗатронутоИсправлено вИсточник
Brotli (библиотека на C)1.0.3–1.0.9, 1.1.0, 1.2.01.0.10, 1.1.1, 1.2.1Google
Node.js 22.xдо 22.23.422.23.4Node.js
Node.js 24.xдо 24.22.124.22.1Node.js
Node.js 26.xдо 26.12.126.12.1Node.js
Node.js 20.x и старше (официальные сборки nodejs.org)поддержка завершенанет (перейдите на 22.x или новее)Node.js
Bunот 1.0.21 до 1.4.4 (не включая 1.4.4)1.4.4Bun
PyPI brotliот 1.0.3 до 1.2.11.2.1GitHub Advisory Database
PyPI brotlicffiот 1.0.3 до 1.2.1.01.2.1.0GitHub 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
Envoyv1.39.2, v1.38.5, v1.37.7, v1.36.11v1.40.0, v1.39.3, v1.38.6, v1.37.8, v1.36.12Envoy
Сборки PHP для Windows8.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-1PHP

.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)

Обновите в каждом виртуальном окружении

То, что вы собрали (контейнеры, исполняемые файлы)

Пересоберите с исправленными версиями и разверните заново

Каждое место, где есть копия Brotli, нужно исправлять отдельно. Обновление ОС исправляет только библиотеку ОС.

Как проверить, затронуты ли вы

Эти команды только проверяют версии в ваших собственных системах.

1

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, поэтому проверяйте его, как описано в пункте «Библиотеки ОС» ниже.

2

Bun

Выполните bun --version. Затронуты версии до 1.4.4. Исполняемые файлы, созданные через bun build --compile, содержат Bun, которым они были собраны, и остаются уязвимыми до пересборки (бюллетень Bun).

3

Python

Выполните pip show brotli brotlicffi (или найдите Brotli и brotlicffi в выводе python -m pip list). Затронуты brotli до 1.2.1 и brotlicffi до 1.2.1.0. Если ни один из них не установлен, исправлять в Python по этой уязвимости нечего. У каждого виртуального окружения и контейнера своя копия, поэтому проверьте каждое. Если пакет установлен из ОС, например python3-brotli, ориентируйтесь на бюллетень безопасности дистрибутива, а не на номер версии.

4

.NET

Выполните dotnet --list-runtimes и dotnet --list-sdks. По данным Microsoft, вы уязвимы, если включили Brotli в распаковке запросов ASP.NET Core или в автоматической распаковке ответов HttpClient либо напрямую вызываете BrotliStream или BrotliDecoder. Ни один из автоматических вариантов не включён по умолчанию.

5

Библиотеки ОС

Проверьте установленную версию командой 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).

Что было раскрыто

Запись за пределы буфера в декодере Brotli (CVE-2026-111497)
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)
Полный список затронутых продуктовПродолжает расти. Для браузеров и других продуктов проверяйте уведомления поставщиков
Дистрибутивы LinuxUbuntu 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.

Читайте дальше

Последние срочные сообщения

FAQ

QЧто произошло?
A

21 октября 2026 года (по времени США) Google выпустил Brotli 1.2.1, 1.1.1 и 1.0.10, исправляющие CVE-2026-111497 — запись за пределы буфера в официальной библиотеке Brotli. Распаковка специально сформированных данных может повредить память и привести к сбою, раскрытию содержимого памяти или, потенциально, к выполнению кода. Node.js, Bun, пакеты Brotli для Python, .NET и другие выпустили исправления для встроенных в них копий.

QЧто такое Node2Shell и HTTP2Shell?
A

Это прозвища данной уязвимости. По данным JPCERT/CC, её называют Node2Shell в связи с раскрытием в Node.js, а HTTP2Shell — потому что Brotli широко используется для сжатия HTTP. Оба названия относятся к CVE-2026-111497, а не к отдельным уязвимостям.

QЗатронут ли я?
A

Вы затронуты, если программа со встроенной Brotli 1.0.3–1.0.9, 1.1.0 или 1.2.0 распаковывает данные Brotli, полученные извне. Это Node.js в соответствующих ветках до 22.23.4, 24.22.1 или 26.12.1, brotli из PyPI до 1.2.1, brotlicffi до 1.2.1.0 и .NET до 8.0.33, 9.0.22 или 10.0.14. Microsoft сообщает, что ASP.NET Core и HttpClient по умолчанию не распаковывают Brotli автоматически, поэтому для .NET всё зависит от того, включили ли вы эту функцию.

QЯ установил обновления ОС. Этого достаточно?
A

Не всегда. Официальные сборки Node.js и образы Docker с nodejs.org, Bun, Python-wheel Brotli, установленные из PyPI, самодостаточные (self-contained) и NativeAOT-приложения .NET, а также однофайловые исполняемые файлы Bun содержат собственную Brotli. Обновление libbrotli в ОС эти копии не меняет. Обновите каждую из них, затем пересоберите и заново разверните образы контейнеров и исполняемые файлы. Node.js, установленный пакетом Ubuntu или Debian, использует системную libbrotli, поэтому его исправляет обновление ОС (трекеры безопасности Ubuntu и Debian).

QЭксплуатируется ли уязвимость?
A

На утро 27 октября (по японскому времени) ни один первичный источник не сообщает об эксплуатации, и уязвимости нет в каталоге KEV CISA. Оценка SSVC от CISA, добавленная в NVD 23 октября, оценивает эксплуатацию как none. Google, Node.js, JPCERT/CC и Microsoft не упоминают публичного доказательства концепции (PoC). Один независимый сайт с разборами утверждает, что PoC опубликован; этот сайт это не проверял.

QНужно ли обновлять requests, urllib3, httpx или aiohttp?
A

На 27 октября ни одна из этих библиотек не опубликовала бюллетень по этой уязвимости. urllib3, httpx и aiohttp распаковывают Brotli, только если установлен brotli или brotlicffi (requests использует urllib3). Исправлять нужно brotli (1.2.1 или новее) и brotlicffi (1.2.1.0 или новее) в том же окружении. Проверьте командой pip show brotli brotlicffi.