Undici CVE-2026-22036: неограниченная цепочка декомпрессии приводит к исчерпанию ресурсов — выпущены патчи

ReactNode.jsDevOps

Что произошло

  • 14 января 2026 года проект undici опубликовал уведомление о безопасности (CVE-2026-22036 / GHSA-g9mf-h72j-4rw9): определенные HTTP-ответы с поддельными заголовками Content-Encoding могут создать неограниченную цепочку декомпрессии, позволяя злонамеренному серверу заставить клиентов, которые автоматически декомпрессируют ответы, выполнять чрезмерную работу CPU и выделять память. Доступны патчированные версии. (github.com)

Почему команды полного стека должны заботиться

  • Undici является де-факто высокопроизводительным HTTP/1.1 клиентом для Node.js и используется напрямую во многих серверных службах и косвенно через транзитивные зависимости и среды выполнения, которые его упаковывают. Удаленный сервер (или любой upstream, с которым взаимодействует ваша служба) может вызвать исчерпание ресурсов в HTTP-клиенте, который слепо принимает произвольно длинные цепочки Content-Encoding — это риск доступности (DoS) как для крайних серверов, так и для бэкенд-сервисов, которые вызывают сторонние API.
  • Уязвимость затрагивает обработку ответов (доступность), а не конфиденциальность данных. Тем не менее, инциденты с доступностью вызывают сбои, проблемы с масштабированием и каскадные сбои в графах микросервисов — поэтому патчирование является срочным для интернет-ориентированных и внутренних служб, которые принимают ненадежные upstream-ответы.

Затронутые и исправленные версии (коротко)

  • Затронутые: версии undici < 6.23.0 и 7.0.0 <= версия < 7.18.2 (см. уведомление для точных диапазонов).
  • Исправленные: обновите до 6.23.0 или 7.18.2 (или более поздней версии 7.x). (github.com)

Практический список действий с высоким воздействием для команд (что делать сейчас)

  1. Быстрое инвентаризация

    • Запустите: npm/yarn/pnpm's dependency tree check, чтобы найти undici (прямые и транзитивные).
      • Примеры проверок: npm ls undici || pnpm why undici.
    • Проверьте базовые образы контейнеров и серверные среды выполнения (некоторые сборки Node упаковывают undici); проверьте свои Docker-образы на наличие встроенного undici или образов Node, которые его включают.
  2. Обновите, где вы контролируете зависимость

    • Прямая зависимость: обновите undici до >= 7.18.2 (или 6.23.0, если вы должны остаться на 6.x), затем пересоберите и разверните.
    • Транзитивная зависимость: предпочтите обновление верхнеуровневого пакета, который включает undici; если это невозможно, используйте переопределения пакетного менеджера (npm/yarn/pnpm) или правила разрешения, чтобы принудительно использовать патчированную версию undici в вашем lockfile.
  3. Для сред выполнения Node, которые упаковывают undici

    • Проверьте примечания к выпуску вашего Node.js или сборки вендора на наличие версии встроенного undici. Если встроенный undici уязвим, обновите Node до безопасной версии среды выполнения от вашего вендора (или примените рекомендации вендора).
    • Если вы не можете немедленно обновить Node, используйте описанные ниже меры смягчения на уровне приложения.
  4. Добавьте легкие меры смягчения на уровне выполнения (защита в глубину)

    • Если вы контролируете код HTTP-клиента, добавьте перехватчик декомпрессии/ответа, который отклоняет длинные или неправдоподобные цепочки Content-Encoding (ограничьте количество кодировок).
    • В undici вы можете добавить перехватчик для проверки заголовка Content-Encoding и отклонять или обрезать подозрительные цепочки перед запуском декомпрессии.
    • Ограничьте использование памяти и CPU, применяя разумные ограничения на размер ответа и таймауты для HTTP-ответов (например, maxHeaderSize, таймауты ответа), где это применимо.
  5. CI, контейнеры и оркестрация

    • Убедитесь, что ваш CI-пайплайн проверяет lockfile и завершает работу, если была введена старая версия undici.
    • Пересоберите образы контейнеров и разверните критические службы по контролируемому графику (canary → rollout), чтобы избежать широкого развертывания изменения, нарушающего работу, без проверки.
  6. Обнаружение и мониторинг

    • Добавьте или пересмотрите метрики времени выполнения: CPU на запрос, задержка запроса, рост памяти после исходящих HTTP-вызовов.
    • Добавьте сигналы тревоги для неожиданных всплесков, связанных с исходящими вызовами или конкретными upstream-хостами. Аудит журналов мест назначения fetch во время инцидентов может помочь выявить злонамеренные upstream.

Почему важно действовать сейчас

  • Это вектор доступности/DoS, который может быть вызван удаленно любым сервером, к которому обращается ваш код. Даже если эксплуатация относительно сложна, радиус поражения в архитектурах микросервисов велик: злоумышленник или неправильно настроенный upstream могут вызвать постоянное высокое использование CPU/памяти у многих вызывающих.
  • Патчирование является простым (обновление версии или простой перехватчик) и обеспечивает немедленную защиту; комбинируйте это с мониторингом и гигиеной lockfile, чтобы избежать регрессий.

Однострочное решение

  • Обновите undici до патчированной версии (6.23.0 или >=7.18.2), пересоберите образы и разверните; если вы не можете немедленно обновить, добавьте перехватчик undici для отклонения длинных цепочек Content-Encoding и установите более строгие ограничения на размер/время ответа. (github.com)

Источник

  • Уведомление о безопасности undici: GHSA-g9mf-h72j-4rw9 (CVE‑2026‑22036). (github.com)

Источник

Читать дальше