Новости · Безопасность

Node2Shell: критическая RCE-уязвимость в Brotli признана активно эксплуатируемой

27 октября 2026 года CISA внесла уязвимость CVE-2026-111497, получившую имя Node2Shell, в каталог известных эксплуатируемых уязвимостей (KEV) — на основании зафиксированных атак в сети. Брешь с оценкой CVSS 9.2 находится не в экзотическом компоненте, а в декодере формата сжатия Brotli, который встроен в Node.js, браузеры и десятки серверных фреймворков. Подробнее о рисках распаковки файлов из недоверенных источников — в разделе безопасность файлов.

31 октября 2026 Редакция LoadFile Чтение 6 мин
Абстрактная капсула данных с трещинами и выпадающими цифрами — символ уязвимости Node2Shell в декодере Brotli

Коротко: уязвимость Node2Shell (CVE-2026-111497, CVSS 9.2) — это переполнение буфера в потоковом декодере формата сжатия Brotli. Патч вышел 21 октября 2026 для Node.js 22.23.4, 24.22.1 и 26.12.1, но 27 октября CISA подтвердила эксплуатацию в реальных атаках и внесла CVE в каталог KEV со сроком устранения до 10 ноября 2026. Если на сервере обрабатываются Brotli-сжатые данные — запрос, ответ или файл — пора проверить версию и обновиться.

Что произошло 27 октября

Brotli — формат сжатия данных без потерь, разработанный Google, который сегодня используется в HTTP-заголовке Content-Encoding почти так же часто, как gzip: его поддерживают браузеры, CDN и серверные платформы. Node.js включает встроенный декодер Brotli в модуль node:zlib, поэтому уязвимость в нём затрагивает огромное число приложений без какого-либо стороннего пакета.

21 октября 2026 года вышли исправленные версии Node.js — 22.23.4, 24.22.1 и 26.12.1 — вместе с патчем в самой библиотеке Brotli (версии 1.0.10, 1.1.1 и 1.2.1). Само исправление в коде Brotli было готово ещё в феврале 2026 года, но массовое распространение патча по зависимым проектам заняло месяцы. 25 октября патчи выпустила Microsoft — для .NET (8.0.33, 9.0.22, 10.0.14, 11 RC3), Visual Studio 2019/2022/2026 и PowerShell 7.4–7.6. А 27 октября CISA добавила CVE-2026-111497 в каталог Known Exploited Vulnerabilities «на основании данных об активной эксплуатации» — с предписанием устранить уязвимость к 10 ноября 2026.

Как работает уязвимость

Формат Brotli умеет переключаться между разными типами блоков прямо внутри потока сжатых данных. Функция-обработчик такого переключения в уязвимом декодере возвращала одинаковый результат для двух разных ситуаций: «формат данных повреждён» и «нужно подождать ещё немного входных данных». Из-за этой путаницы потоковый декодер продолжал дописывать новые байты во внутренний восьмибайтовый буфер вместо того, чтобы остановиться с ошибкой — и записывал их за границей буфера, повреждая соседние области памяти декодера.

!
Почему это опасно

Для эксплуатации не нужна авторизация — достаточно, чтобы уязвимый код декодировал Brotli-данные, присланные злоумышленником. Итог — от аварийного завершения процесса и утечки фрагментов памяти до удалённого выполнения кода, в зависимости от того, что именно окажется затёрто в памяти.

Кто под угрозой

Хуже всего ситуация выглядит для серверов на Node.js, которые автоматически распаковывают входящие данные в формате Brotli. Исследователи указывают на несколько типовых точек входа:

  • обработчики тел запросов json(), urlencoded(), text() и raw() в Express 5 и body-parser 2.x — они сами распаковывают Brotli-тела запросов;
  • встроенный fetch() в Node.js, который автоматически декодирует Brotli-ответы — под риском оказывается любой код, который ходит по внешним или пользовательским URL;
  • прямые вызовы zlib.brotliDecompress() в собственном коде приложения.

Но проблема шире Node.js. Та же уязвимая библиотека Brotli (версии с 1.0.3 по 1.2.0) используется в Python-пакетах brotli и brotlicffi, в рантайме Microsoft .NET, в Bun, Envoy и Istio. Уязвимость обнаружили исследователи безопасности OpenAI Codex во время red-teaming и уведомили разработчиков Brotli и зависимых проектов — отсюда и цепочка скоординированных патчей в октябре.

Почему CISA назвала это активной эксплуатацией

Сразу после публикации патча часть исследователей сомневалась, что баг реально даёт удалённое выполнение кода, а не только отказ в обслуживании — proof-of-concept на GitHub срабатывал лишь на специально ослабленных сборках. Но 26 октября лаборатория ELLIO, которая мониторит массовое сканирование и попытки эксплуатации в интернете, зафиксировала вредоносный запрос, нацеленный именно на Node.js 24.22.0 на x86-64-системах. На следующий день, 27 октября, CISA подтвердила: доказательства активной эксплуатации есть, CVE-2026-111497 внесена в каталог KEV, федеральным агентствам США предписано устранить её до 10 ноября 2026 года.

Что делать прямо сейчас

Если вы администрируете сервер на Node.js или зависите от стороннего сервиса на нём — порядок действий простой:

  1. Проверьте версию Node.js: безопасны 22.23.4, 24.22.1, 26.12.1 и новее. Версии 25.x, 23.x, 20.x и более ранние сняты с поддержки и патча не получат — переходите на поддерживаемую ветку.
  2. Если приложение использует brotli или brotlicffi напрямую в Python — обновитесь до 1.2.1 / 1.2.1.0 соответственно.
  3. Для .NET и PowerShell — установите октябрьские патчи Microsoft (.NET 8.0.33/9.0.22/10.0.14, PowerShell 7.4–7.6).
  4. Обязательно перезапустите сервисы и пересоберите контейнерные образы: уже запущенный процесс продолжает использовать уязвимую версию кода в памяти, даже если файлы на диске уже обновлены.

Если вы уже сталкивались с похожей проблемой в экосистеме Node.js, вспомните историю с gzip-бомбой в node-tar — ещё один пример, как уязвимость в распаковке сжатых данных ломает серверы, принимающие архивы или сжатый трафик от пользователей.

Источники

Читайте также