Запись за границами буфера в Brotli открывает путь к удалённому выполнению кода в Node.js и Astra Linux

vulnerability

Уязвимость в декодере Brotli, который входит в состав Node.js, позволяет удалённому злоумышленнику выполнить произвольный код на сервере. Проблема получила идентификатор CVE-2026-111497 и оценку 9,8 по CVSS 3.1. Под удар попадают серверные приложения на Node.js веток 22, 24 и 26, сама библиотека Brotli, а также дистрибутивы Astra Linux, где эти компоненты поставляются в составе пакетов. Аутентификация не требуется, участие пользователя тоже: достаточно одного запроса к сервису, который принимает сжатые данные.

CVE-2026-111497 в декодере Brotli Node.js и Astra Linux

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

Механика ошибки

Корень проблемы - отсутствие проверки возвращаемого значения. Функция, разбирающая сжатый поток, не сообщает вызывающему коду о неудаче, и тот продолжает запись в буфер, размер которого уже не соответствует объёму данных. Так возникает запись за границами буфера: данные выходят за пределы выделенной памяти и попадают в соседние области. В карточке Банка данных угроз безопасности информации (BDU) указаны два типа ошибки - непроверенное возвращаемое значение и запись за границами буфера.

Что это даёт злоумышленнику

Подготовленный особым образом сжатый поток превращает такую запись в выполнение произвольного кода с правами процесса Node.js. Атакующий получает контроль над смежными участками памяти и может подменить служебные структуры. Для сетевого сервиса это означает полную компрометацию узла, а не только отказ в обслуживании.

Оценки в карточке высокие по всем методикам: 10 по CVSS 2.0, 9,8 по CVSS 3.1 и 9,2 по CVSS 4.0. Вендор относит уязвимость к критическому уровню опасности. Вектор атаки - сетевой, сложность низкая, привилегии и взаимодействие с пользователем не нужны. Четвёртая версия методики добавляет уточнение: успешной атаке предшествуют определённые условия в конфигурации цели, но они не относятся к редким.

Эксплуатация уже доступна

Эксплойт находится в открытом доступе. Среди источников карточки приведён перечень известных эксплуатируемых уязвимостей CISA - агентства по кибербезопасности и защите инфраструктуры США. Появление готового эксплойта сокращает окно между публикацией сведений о проблеме и первыми попытками атаки, поэтому откладывать обновление рискованно.

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

В перечне уязвимого программного обеспечения - Node.js до 22.23.4, до 24.22.1 и до 26.12.1. Отдельно значатся выпуски библиотеки Brotli: ветки от 1.0.3 до 1.0.10, от 1.1.0 до 1.1.1 и от 1.2.0 до 1.2.1. Затронуты и дистрибутивы российского производителя "РусБИТех-Астра": Astra Linux Special Edition версий 1.7, 1.8, 3.8, 4.7 и 4.8 на архитектуре ARM, а также Astra Linux Common Edition 1.6 "Смоленск". Все они входят в единый реестр российских программ.

Практический риск выше там, где Node.js обслуживает внешние запросы: публичные API, прокси, серверы рендеринга. Если приложение принимает сжатые тела запросов от недоверенных клиентов, одного сетевого пакета достаточно для попытки эксплуатации. В контейнерах проблема наследуется вместе с базовым образом, поэтому старые сборки остаются уязвимыми даже после обновления хост-системы.

Исправления

Проблему закрыли в октябрьском релизе безопасности Node.js: ветки 22, 24 и 26 получили исправленные сборки. Для библиотеки Brotli производитель ссылается на выпуски 1.0.10, 1.1.1 и 1.2.1 - перед обновлением полезно свериться с примечаниями к релизу, поскольку часть этих версий ещё числится в границах уязвимых диапазонов. Для Astra Linux исправления выложены в вики вендора по каждой версии дистрибутива. Статус в BDU - уязвимость подтверждена производителем и устранена.

Что делать администраторам

Обновите Node.js до сборки из октябрьского бюллетеня своей ветки: 22.23.4, 24.22.1 или 26.12.1 как минимум. Пересоберите контейнерные образы, а не только базовый слой на хосте. Проверьте, не осталось ли в зависимостях собственных сборок библиотеки Brotli, и переведите их на версии из рекомендаций. На Astra Linux установите пакеты по инструкциям вендора для своей версии дистрибутива. Если обновление отложено, ограничьте приём сжатых данных из внешних источников на периметре.

Сжатие редко воспринимают как поверхность атаки, хотя декодер обрабатывает поток прямо в памяти процесса и без изоляции. Ошибки в таких библиотеках обходятся дорого: они затрагивают сразу все сервисы на платформе и все дистрибутивы, куда компонент попал транзитом. Здесь важен ещё и эффект каскада - обновление требуется и самому Node.js, и библиотеке, и операционной системе, которая поставляет её в пакетах.

Ссылки

Комментарии: 0