Дыра в декодере Brotli угрожает удалённым выполнением кода во всех версиях Node.js

· Безопасность
21 октября Node.js выпустил обновления для трёх поддерживаемых линеек, закрыв 10 уязвимостей. Самая опасная — ошибка в библиотеке распаковки Brotli, которую проект описывает как потенциально дающую удалённое выполнение кода.

cover.svg

Проект Node.js 21 октября 2026 года выпустил обновления безопасности сразу для трёх поддерживаемых линеек — 22.x, 24.x и 26.x, — устранив 10 уязвимостей. Исправленные версии: 22.23.4 и 24.22.1 на линейках с долгосрочной поддержкой, а также 26.12.1 на текущей. Линейки 20.x и младше достигли конца жизни и обновления не получат — пользователям предлагается перейти на поддерживаемую ветку.

Ошибка в Brotli

Главная уязвимость (CVE-2026-111497) — запись за пределами буфера в декодере Brotli, библиотеки сжатия от Google, собственную копию которой поставляет Node.js. Ошибку запускает некорректно сформированные сжатые данные. Node.js выполняет этот код при любой распаковке Brotli — напрямую через модуль node:zlib либо автоматически, когда приложение вызывает fetch() для ответа, сжатого Brotli. Под угрозой оказываются приложения, распаковывающие данные, которыми управляет злоумышленник, — тело запроса или ответ со стороннего сервера.

Исправление — патч из вышестоящего проекта Brotli; тот же код вышел в версиях Brotli 1.2.1, 1.1.1 и 1.0.10, так что обновление может понадобиться и другому ПО, включающему эту библиотеку. Любопытно, что в исходники Brotli правка попала ещё в феврале 2026 года, а в виде релиза безопасности вышла лишь в октябре.

Уязвимость оценена как высокая, а не критическая, и на практике её возможности скромнее формулировки "удалённое выполнение кода". Опубликованный 22 октября публичный PoC добивается выполнения кода лишь на намеренно ослабленной тестовой сборке; на штатной сборке его автор получил только сбой и ограниченное чтение памяти процесса, но не исполнение кода. Обновлённый Node.js отвергает вредоносный ввод, а случаев эксплуатации в дикой природе на 22 октября не зафиксировано.

Прочие исправления

Ещё три уязвимости также высокого уровня: два обхода проверки TLS-сертификата через нестандартную запись IP-адреса сервера (CVE-2026-106069 и CVE-2026-105483) и ошибка, из-за которой dns.resolve обрезал имя на встроенном нулевом байте (CVE-2026-105482). Среди средних — поведение crypto.randomUUID() и crypto.randomInt(), возвращающих одни и те же значения во всех процессах приложений, собранных как startup-снимок или единый исполняемый файл (CVE-2026-106074), что подрывает любую их непредсказуемость.

Блокировка сертификатов eMudhra

Те же обновления запрещают Node.js доверять восьми промежуточным ключам удостоверяющего центра индийского провайдера eMudhra, о компрометации которых сообщили несколькими днями ранее. Node.js использует корневой список Mozilla, но по умолчанию не проверяет отзыв сертификатов, поэтому раньше цепочка на одном из скомпрометированных ключей проходила проверку. Аналогичный блок Go внёс в своё обновление 20 октября.

Обновления также освежают встроенные компоненты: undici (клиент за fetch()), c-ares, OpenSSL и SQLite. Временного обходного решения для бреши в Brotli нет — единственное лекарство обновление. Компания Vercel сообщила, что 21 октября добавила правила фаервола, блокирующие атаку во входящих запросах, но они не покрывают ответы, которые приложение само запрашивает у сторонних серверов.


Источник: The Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.