Наши продукты

Все выпуски в PDF →
  • Годовая подписка на Xakep.ru

    Все статьи, PDF-архив, скидки и другие бонусы

    6000₽ в год

    Подписаться
  • Ежеквартальный «Хакер» #4

    Печатный выпуск за август–ноябрь 2026 года

    2000₽

    Заказать
  • Ежеквартальный «Хакер» #3

    Печатный выпуск за май–июль 2026 года

    2000₽

    Заказать
  • Спецвыпуск «Хакера» #4

    Избранные материалы 2021–2022 годов на бумаге

    2000₽

    Заказать

Разработчики 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 обрезать имя хоста, если внутри него встречался нулевой байт.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии