Уязвимость в декодере Brotli от Google угрожает серверам на Node.js, Python и .NET

Уязвимость в декодере Brotli от Google угрожает серверам на Node.js, Python и .NET

изображение: grok

Критическая уязвимость CVE-2026-111497 в декодере Brotli от Google затронула Node.js, Bun, Python, .NET и компоненты облачной инфраструктуры. Специалисты Imperva подтвердили удалённое выполнение произвольного кода на уязвимой сборке Node.js, а разработчики нескольких платформ уже выпустили исправления. Проблема получила неофициальное название Node2Shell и вышла за рамки одного проекта, ведь Brotli встроен в множество приложений и библиотек.

Brotli разработан Google для сжатия данных, он ускоряет передачу информации в интернете, а декодер на принимающей стороне восстанавливает исходное содержимое. Ошибка в обработке некорректных данных позволяет записывать информацию за пределы отведённой области памяти.

Уязвимость затрагивает версии Brotli с 1.0.3 по 1.2.0 и получила 9,2 балла по шкале CVSS 4.0, что соответствует критическому уровню. Удалённый атакующий без учётной записи при определённых условиях способен добиться нескольких последствий:

  • повреждения памяти;
  • отказа в обслуживании;
  • раскрытия данных;
  • потенциального выполнения собственного кода.

Причина крылась в обработке переключения типов блоков. Встретив некорректную последовательность, декодер принимал её за нехватку входных данных, продолжал работу и записывал байты за границы внутреннего буфера размером 8 байт. Повреждение памяти не всегда заканчивается обычным сбоем.

Ошибка в сжатии превратилась в рабочую атаку

Команда Imperva Threat Research проверила уязвимость на официальном образе Node.js 24.22.0 для Linux с архитектурой ARM64. Демонстрационный эксплойт добился выполнения кода внутри серверного процесса при обработке вредоносных HTTP-данных. Вредоносный поток попадал в декодер через встроенную функцию fetch() и через приём входящих запросов в Express 5 и body-parser 2. Успешный запуск требовал нескольких попыток, поэтому гарантированного взлома любого сервера одним запросом эксперимент не показал. После установки Node.js 24.22.1 тот же поток отклонялся без выполнения постороннего кода.

Само наличие библиотеки в системе не открывает злоумышленнику путь к уязвимому коду, для атаки нужно совпадение нескольких условий:

  • специально подготовленный поток Brotli;
  • приложение, которое пытается его распаковать;
  • подключённый обработчик Brotli, ведь стандартный HTTP-сервер Node.js распаковывает эти данные автоматически не во всех случаях.

Node.js получил исправление, но одной заплатки мало

Разработчики Node.js выпустили обновления 21 октября 2026 года и закрыли уязвимость в версиях 22.23.4, 24.22.1 и 26.12.1. Ветки с завершённой поддержкой исправлений могут не получить. Проект Google Brotli обновился до версий 1.0.10, 1.1.1 и 1.2.1. Программа нередко несёт собственную копию декодера, поэтому обновление системного пакета не гарантирует исчезновения уязвимых компонентов. Остальные платформы тоже получили исправления:

  • Bun 1.4.4 (уязвимыми были выпуски начиная с 1.0.21), а автономные исполняемые файлы, собранные старой версией, придётся пересобрать;
  • Python-пакеты Brotli 1.2.1 и brotlicffi 1.2.1.0;
  • .NET 8.0.33, 9.0.22 и 10.0.14, которые Microsoft опубликовала 25 октября;
  • Envoy 1.40.0, 1.39.3, 1.38.6, 1.37.8 и 1.36.12;
  • Istio 1.31.2, 1.30.6 и 1.29.9, причём последний выпуск относится к ветке с закончившейся поддержкой.

Envoy и Istio уязвимы в конфигурациях с активной распаковкой Brotli, а в .NET стандартные ASP.NET Core и HttpClient не распаковывают этот формат автоматически во всех случаях. Российским компаниям, которые строят внутренние сервисы на Node.js, Python или Envoy, имеет смысл сверить версии и настройки уже сейчас, ведь копии декодера нередко прячутся в контейнерных образах.

Искусственный интеллект нашёл ошибку, а чинить пришлось всей отрасли

Автором находки в бюллетене Node.js названы Хай Тран и Сильви Майер из команды OpenAI Codex Security. ИИ-инструменты помогают находить дефекты, которые остаются незамеченными продолжительное время, но после находки начинается не менее сложная часть работы, ведь нужно определить все проекты с уязвимым компонентом и довести исправления до администраторов. Для поиска встроенных копий декодера Trail of Bits представила Brotli Checker, который ищет потенциально уязвимые реализации в исходном коде, зависимостях и файловых системах контейнеров. Найденный старый код ещё не доказывает, что он доступен атакующему.

Администраторам и разработчикам предстоит пройти несколько шагов:

  • проверить версии Node.js, Bun, Python-пакетов, .NET, Envoy и Istio;
  • выяснить, какие сервисы принимают внешние сжатые данные;
  • обновить зависимости и пересобрать контейнеры;
  • перезапустить затронутые процессы.

Там, где обновиться сразу нельзя, риск снизит временное ограничение обработки недоверенных потоков Brotli. Подтверждённая демонстрация пока относится к лабораторным испытаниям Imperva, а сам эксплойт ещё не означает массовых атак на реальные серверы. Один декодер живёт в десятках проектов, а исправления выходят в разном темпе, поэтому российским ИТ-командам мало обновить один пакет, нужно найти все места, где встроен Brotli, в том числе старые копии внутри приложений.

Эксперты CISOCLUB отметили, что главная проблема Node2Shell состоит в масштабе общего компонента, а не в изощрённости самой атаки. Один декодер встроен в среды выполнения, пакеты, прокси и контейнерные образы, и каждая экосистема выпускает исправления по своему графику. Реальный срок устранения риска определяет не дата бюллетеня, а скорость инвентаризации зависимостей внутри компании.

Компаниям с устаревшими ветками придётся переходить на поддерживаемые версии, ведь заплаток для них может не появиться. Вместе с тем уязвимость показывает, что ИИ-инструменты ускоряют поиск ошибок быстрее, чем отрасль успевает их исправлять.

Ранее сообщалось, что Anthropic с помощью ИИ Claude исследовала 25 крупных проектов с открытым исходным кодом и выявила почти 500 проблем безопасности в программах на C, Java и Python. Среди обнаруженных недостатков оказались неправильные настройки защитных механизмов, возможность обращаться к чувствительным компонентам программ до прохождения авторизации, а также конфликт конфигурации, который оставался незамеченным в течение 21 года. В компании считают, что разработчикам стоит не только искать отдельные уязвимости, но и уменьшать количество участков кода, доступных потенциальным злоумышленникам.

Артем
Автор: Артем
Представитель редакции CISOCLUB. Пишу новости, дайджесты, добавляю мероприятия и отчеты.
Комментарии:

Как мы обрабатываем данные: политика обработки персональных данных