Уязвимости в Node.js: исправлены проблемы HTTP/2, модели разрешений и других компонентов

node.js

Ошибки в обработке HTTP/2, механизме контроля доступа Permission Model и ряде встроенных модулей Node.js открывали возможность для отказа в обслуживании, удалённого выполнения кода, раскрытия информации и обхода политик безопасности. Разработчики платформы выпустили корректирующие релизы для всех активных линий: 22.23.2, 24.18.1 и 26.5.1. В сумме закрыто двенадцать уязвимостей, наибольшая степень угрозы по ним оценивается как высокая (High).

Детали уязвимостей

Три из исправленных проблем связаны с реализацией протокола HTTP/2. Уязвимость CVE-2026-56846 позволяла злоумышленнику обходить ограничение памяти maxSessionMemory за счёт сохранения заголовков, что приводило к исчерпанию ресурсов и отказу в обслуживании. Другая ошибка, CVE-2026-56848, вызывала повреждение памяти после освобождения (heap-use-after-free) при повторном вызове nghttp2_session_mem_send() во время выполнения nghttp2_session_mem_recv(). Обе уязвимости затрагивают все поддерживаемые ветки. Третья проблема в HTTP/2 не вошла в список высоких - она будет описана ниже.

Ещё одна уязвимость высокой степени опасности (CVE-2026-58043) обнаружена в модели разрешений Node.js. При активированном флаге --permission пользователь, получивший доступ к определённому пути, мог использовать особенность обработки границ префиксов radix-tree для чтения и записи за пределами разрешённого списка файловых систем. Ошибка затрагивает все три активные линии.

К среднему уровню угрозы отнесены пять уязвимостей. CVE-2026-56850 связана с некорректным повторным использованием mTLS-идентификаторов в HTTPS Agent: из-за коллизий ключей объектного массива PFX один и тот же клиентский сертификат мог применяться для запросов, настроенных с другим удостоверением. Вторая проблема в HTTPS Agent (CVE-2026-58040) стала следствием неполного исправления предыдущей уязвимости CVE-2026-48934: при повторном использовании TLS-сессии проверка имени хоста могла пропускаться. Ошибка в модуле node:sqlite (CVE-2026-58041) позволяла устаревшему итератору, полученному через DatabaseSync#createTagStore(), продолжать выполнять кэшированный подготовленный запрос после его сброса и привязки новых параметров. Уязвимость затрагивает только линии 26.x и 24.x. Вызов dns.resolveAny() (CVE-2026-58042) приводил к аварийному завершению процесса, если DNS-ответ содержал более 256 записей A - повторная эксплуатация вела к отказу в обслуживании. Синхронные API модуля node:zlib (CVE-2026-58045) могли аварийно завершать процесс при подмене длины TypedArray через байтовую длину, что также создавало условия для DoS.

Четыре уязвимости получили низкую степень опасности. CVE-2026-56847 касается модели разрешений: вызов trace_events.createTracing().enable() позволял записывать трассировочные логи за пределами разрешённых путей --allow-fs-write, что потенциально вело к утечке конфиденциальных данных. Аналогичный обход в той же модели (CVE-2026-58039) давал возможность процессу. report записывать и перезаписывать файлы вне дозволенных директорий. В HTTP-клиенте (CVE-2026-58044) из-за усечения заголовков при превышении maxHeadersCount злоумышленник мог скрыть поле Content-Length от прикладного кода, сохранив передачу тела запроса, что создавало риск десинхронизации и контрабанды запросов для прокси-серверов, пересобирающих заголовки. Отдельно CVE-2026-48934, хотя и не описана в текущем бюллетене как самостоятельная уязвимость, фигурирует в контексте неполного исправления - её первоначальный патч не устранял проблему проверки имени хоста, что и было закрыто в текущих релизах.

Все перечисленные уязвимости затрагивают версии Node.js, предшествующие 22.23.2 (LTS), 24.18.1 (LTS) и 26.5.1 (Current). Разработчики обновили зависимости undici до версий 8.9.0, 7.29.0 и 6.28.0, а llhttp до 9.4.3. Выпуск обновлений изначально планировался на 27 июля 2026 года, но был дважды отложен из-за инфраструктурных проблем и необходимости дополнительного тестирования; финальные версии опубликованы 29 июля.

Пользователям Node.js рекомендуется как можно скорее установить патчи, особенно в средах, где используются HTTP/2, модель разрешений с --permission, HTTPS-агенты с mTLS или синхронные вызовы zlib. Для временной защиты от эксплуатации CVE-2026-56846 и CVE-2026-58043 можно ограничить входящие HTTP/2-соединения и тщательно настраивать политики доступа к файловой системе, однако эти меры не заменяют полного обновления. Ошибки такого масштаба в очередной раз напоминают о важности своевременного управления исправлениями в средах выполнения, используемых как в серверной инфраструктуре, так и в инструментах разработки.

Ссылки

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