Node.js закрыл 12 уязвимостей: обход проверки TLS-сертификата и падение процесса через WebCrypto

18 июня вышли внеплановые релизы Node.js 26.3.1, 24.17.0 и 22.23.0. Всего исправлено двенадцать CVE, две из них — высокой степени опасности: обход проверки wildcard-сертификатов в TLS и краш процесса при шифровании больших буферов через WebCrypto.

DB
DBG · по материалам Node.js Blog
0

Проект Node.js выпустил синхронные security-релизы для всех поддерживаемых веток: 26.3.1 (Current), 24.17.0 (Krypton) и 22.23.0 (Jod). В сумме закрыто двенадцать CVE — две высокой степени опасности, остальные средней и низкой. Обновление относится к тем, которые не стоит откладывать до следующего спринта: часть проблем касается TLS и HTTP/2, то есть периметра, который у большинства сервисов смотрит наружу.

Первая из двух серьёзных дыр — CVE-2026-48618. Node по-своему нормализует юникодные символы, похожие на точку, при сверке имени хоста с сертификатом. Из-за расхождения в обработке разделителей злоумышленник может добиться того, что wildcard-сертификат будет принят на большей глубине поддоменов, чем допустимо, — фактически это обход аутентификации по сертификату. Вторая, CVE-2026-48933, проще по механике и опаснее по последствиям для доступности: если на вход subtle.encrypt() в WebCrypto подать буфер, размер которого кратен 2 ГиБ, процесс падает. Для сервиса, который шифрует пользовательские файлы, это готовый DoS одним запросом.

Средний уровень тоже неприятный. CVE-2026-48615 — утечка учётных данных прокси в ошибке ERR_PROXY_TUNNEL. CVE-2026-48619 — неограниченный рост памяти на ORIGIN-фреймах HTTP/2, CVE-2026-48937 — незавершённая очистка после GOAWAY (только 22.x и 24.x). CVE-2026-48928 позволяет обойти авторизацию mTLS, если SNI передан в верхнем регистре; CVE-2026-48930 — подмена authority через имя хоста со встроенным нулевым байтом; CVE-2026-48934 — обход проверки при переиспользовании TLS-сессии; CVE-2026-48931 — отравление очереди HTTP-ответов через состояние гонки. Три низких CVE касаются обхода permission model: через process.report.writeReport(), через FileHandle.utimes() и через unix-сокеты (последнее — только 26.x).

Заодно подтянуты зависимости, в которых были свои публичные уязвимости: llhttp до 9.4.2, nghttp2 до 1.69.0, OpenSSL до 3.5.7, undici до 8.5.0 / 7.28.0 / 6.27.0 в зависимости от ветки.

Что делать разработчику. Обновляйтесь до 26.3.1, 24.17.0 или 22.23.0 — минорные версии в рамках своей ветки, ломающих изменений нет, так что это самый дешёвый апдейт из возможных. В контейнерах одного npm ci мало: пересоберите образы, иначе базовый слой с уязвимым Node останется на месте (docker compose build --no-cache или явный пин тега). Приоритет повышайте, если у вас: HTTP/2-сервер, mTLS-аутентификация клиентов, исходящие запросы через корпоративный прокси или шифрование больших файлов на бэкенде. Отдельно напомним, что ветки 18.x и 20.x уже EOL и патчей не получают в принципе — если вы всё ещё на них, эти двенадцать CVE у вас останутся навсегда.

Комментарии

Node.js закрыл 12 уязвимостей: обход проверки TLS-сертификата и падение процесса через WebCrypto | DBG