VMTech
Обсудить проект →

Imperva подтвердила RCE через Brotli в официальной сборке Node.js

Imperva подтвердила RCE через Brotli в официальной сборке Node.js

Исследователи Imperva продемонстрировали удалённое выполнение кода через CVE-2026-111497 в официальном образе Node.js 24.22.0 для Linux arm64. Для атаки применяются специально сформированные данные Brotli, которые передаются встроенному декодеру; Node.js выпустил исправления 21 октября, а в версии 24.22.1 тот же входной набор отклоняется.

Демонстрация важна тем, что прежний публичный proof of concept запускал код только в намеренно ослабленной тестовой сборке. На стандартной сборке его автор сообщал о сбое и ограниченном чтении памяти процесса, но не о рабочем выполнении кода. Imperva получила выполнение кода без отладчика и без модификации Node.js, хотя в её среде Linux arm64 для этого потребовалось несколько попыток.

Какие приложения находятся в зоне риска

Проблема находится во встроенном декодере Brotli и касается приложений на поддерживаемых ветках Node.js 22.x, 24.x и 26.x, а не только конфигурации, проверенной Imperva. Исследователи не тестировали другие архитектуры, а также ветки 22.x и 26.x на возможность воспроизведения выполнения кода.

Декодер может быть вызван при получении Brotli-сжатого ответа через встроенный fetch() Node.js. Второй путь связан с разбором сжатого тела входящего запроса: в Express 5 функции express.json(), express.urlencoded(), express.text() и express.raw() умеют декодировать Brotli наряду с gzip и deflate, если middleware применён к маршруту.

Обычный HTTP-сервер Node.js не начинает распаковывать Brotli-тело лишь потому, что получил такой запрос: необходимы middleware или явный вызов декодирования. Imperva воспроизвела выполнение кода на пути входящего запроса и на пути ответа, проверив закреплённые версии Express 5.0.0–5.3.0 и body-parser 2.0.0–2.3.0. Все промежуточные версии не проверялись.

Почему возникает ошибка

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

В отдельном тесте с санитайзером памяти продолжение обработки привело к записи за пределами предусмотренного буфера. Node.js импортировал исправление из upstream-проекта Brotli: теперь декодер прекращает обработку с ошибкой формата вместо продолжения в недопустимом состоянии.

Что проверить командам разработки

Основная мера — переход на исправленный релиз Node.js и обновление контейнерных образов и прочих артефактов, в которых поставляется бинарный файл Node.js. Инвентаризация только зависимостей пакетов может не показать такие встроенные копии рантайма.

Для веток 20.x и более ранних исправления не выпускаются: их следует перенести на поддерживаемую ветку. В advisory нет обходного решения внутри Node.js. Imperva рекомендует, где это осуществимо, временно ограничить обработку недоверенного Brotli-трафика на затронутых путях, но подчёркивает, что уязвимость устраняет только обновление. Vercel сообщила, что 21 октября добавила правила для блокировки атаки во входящих запросах; они не защищают Brotli-ответы, которые приложение получает с внешних серверов.

Для бизнеса практический вывод прост: необходимо сверить версии Node.js в сервисах и образах, определить маршруты с распаковкой недоверенных запросов и сценарии использования встроенного fetch(), а затем развернуть исправленные сборки. Отсутствие известных атак не заменяет обновление, особенно там, где Brotli поступает от внешних клиентов или серверов.

#nodejs#cybersecurity#websecurity#vulnerability
Открытая аналитика
На сайте 5 просмотров
мин чтения 4 23.10.2026
Instagram

Imperva подтвердила RCE через Brotli в официальной сборке Node.js

Открыть публикацию в Instagram ↗