Разработчики Node.js выпустили обновления для всех поддерживаемых веток (22.x, 24.x и 26.x), в которых устранили десять уязвимостей. Самая серьезная из этих проблем затрагивает встроенный декодер Brotli и, по оценке специалистов, может привести к удаленному выполнению кода. Эта уязвимость в Brotli уже получила названия Node2Shell, HTTPS2Shell и Brocolli2Shell и опасна не только для Node.js, но также для Bun, Python-пакетов, Envoy, Istio и другого ПО.
Исправления вошли в состав Node.js 22.23.4, 24.22.1 и 26.12.1. Так как поддержка веток 20.x и более ранних уже прекращена, они не получат патчей, а их пользователям рекомендуют переходить на актуальные версии Node.js.
Наиболее опасная уязвимость получила идентификатор CVE-2026-111497 и связана с out-of-bounds записью. Проблема возникает, когда Brotli обрабатывает специально подготовленные сжатые данные.
Разработанный специалистами компании Google алгоритм сжатия данных Brotli встроен непосредственно в Node.js, поэтому уязвимость может проявляться при распаковке специально подготовленных данных. Это касается как работы с Brotli через модуль node:zlib, так и через fetch(): Node.js автоматически распаковывает ответы серверов, сжатые этим алгоритмом. Таким образом, для атаки злоумышленнику нужно добиться, чтобы приложение обработало вредоносные Brotli-данные (например, присланные в запросе или полученные в ответе от внешнего сервера).
Для устранения уязвимости разработчики Node.js использовали патч проекта Brotli, и это исправление заставляет декодер прекращать обработку некорректных данных до выхода за границы буфера. Аналогичный патч вошел в состав самого Brotli версий 1.2.1, 1.1.1 и 1.0.10.
Так как уязвимость затрагивает декодер Brotli, который используют многие другие проекты, проблема не ограничивается только Node.js. CVE-2026-111497 также затрагивает рантайм Bun, Python-пакеты Brotli и brotlicffi, прокси Envoy и платформу Istio. Для них уже появились исправления, а самой уязвимости успели присвоить такие названия, как HTTPS2Shell, Brocolli2Shell и даже Brotlipocalypse.
При этом условия эксплуатации зависят от конкретного продукта. Например, Envoy и Istio уязвимы только при включенном декомпрессоре Brotli. В свою очередь в Python, если в окружении установлен пакет Brotli или brotlicffi, популярные HTTP-клиенты вроде Requests, urllib3, httpx и aiohttp могут автоматически распаковывать Brotli-ответы. То есть уязвимость может затронуть даже приложения, которые сами не используют Brotli напрямую.
Отметим, что PoC-эксплоит, изначально представленный для CVE-2026-111497 в Node.js, позволял добиться выполнения кода лишь в специально ослабленной тестовой сборке. Однако вскоре эксперты компании Imperva опубликовали собственный эксплоит, который получил название Node2Shell. Этот PoC демонстрирует удаленное выполнение произвольного кода в Node.js 24.22.0 для Linux arm64 и не требует использования отладчика и каких-либо модификаций сборки. Хотя отмечается, что для выполнения кода может потребоваться несколько попыток.
Среди других ошибок, исправленных в Node.js, можно отметить CVE-2026-106069 и CVE-2026-105483, которые позволяли обойти проверку имени хоста в TLS-сертификате с помощью IP-адресов в нестандартном формате, а также баг CVE-2026-105482, который вынуждал dns.resolve обрезать имя хоста, если внутри него встречался нулевой байт.

