Node.js уязвим для удалённого выполнения кода и обхода проверки TLS-сертификата

node.js

Node.js содержит десять уязвимостей, часть которых позволяет удалённо выполнить код и обойти проверку соответствия имени хоста TLS-сертификату. Остальные ведут к отказу в обслуживании, раскрытию информации и обходу модели разрешений. Затронуты ветки 22.x, 24.x и 26.x, то есть текущая линия и две линии с долгосрочной поддержкой. Исправления вышли для всех трёх одновременно.

Переполнение буфера в Brotli, обход TLS и повтор случайных значений

Самая тяжёлая ошибка - запись за границами буфера в декодере Brotli, модуле распаковки данных, сжатых этим алгоритмом. При разборе сжатого потока программа выходит за пределы выделенного участка памяти. В результате удалённый злоумышленник получает возможность исполнить свой код на узле. Вендор относит проблему к высокому уровню (High) и присвоил ей идентификатор CVE-2026-111497. Атака идёт по сети; нужна ли учётная запись, в описании не сказано.

Обход проверки TLS-сертификата

Три ошибки в TLS, протоколе шифрования транспортного уровня, позволяют выдать подменённый сервер за доверенный. Одна срабатывает, когда адрес записан полноширинными цифрами, то есть символами Unicode, похожими на обычные цифры. Проверка имени хоста такой адрес не распознаёт. Вторая ошибка проявляется при нестрогом разрешении имени хоста в IP-адрес, третья - при неканонической записи IPv4-адреса.

В результате сертификат с именем DNS-узла принимается как подтверждение подлинности IP-конечной точки (сетевого узла). Приложение соглашается на соединение с чужим сервером, поэтому открывается путь атаке "человек посередине" (man-in-the-middle), при которой злоумышленник встаёт между клиентом и сервером. Ошибка с полноширинными цифрами затрагивает только ветки 24.x и 26.x.

Случайные значения, имена узлов и модель разрешений

Высокий уровень у ещё одной ошибки, на этот раз в разрешении имён DNS (система доменных имён). Функция разрешения обрезает имя на нулевом байте, поэтому приложение получает адрес для укороченной строки. Расхождение между проверенным и запрошенным именем позволяет обойти ограничения по домену.

Средний уровень уязвимости в HTTP (протокол обмена запросами и ответами) проявляется на постоянных соединениях (keep-alive). Сокет обрабатывает ответ, записанный до отправки запроса. Из-за этого данные одного обмена могут попасть в ответ на другой запрос.

Ещё одна ошибка среднего уровня касается генератора случайных значений. Кэш энтропии, запас случайных чисел для функций randomUUID и randomInt, сохраняется в снимках состояния и в однофайловых сборках (single executable application). Каждый процесс из такого снимка повторяет одинаковые значения, поэтому созданные с их помощью идентификаторы перестают быть уникальными.

Низкий уровень у трёх ошибок. Одна затрагивает разбор ZIP-архивов: после неудачной проверки заголовка функция возвращает префикс, содержимым которого управляет злоумышленник. Две другие касаются модели разрешений, механизма ограничения доступа процесса к файлам. Обход идёт через функцию определения реального пути, а поиск по шаблону с подстановочным знаком выдаёт больше прав, чем задано в настройках.

Версии с исправлениями

Исправления вышли в выпусках 22.23.4, 24.22.1 и 26.12.1; для веток 22.x и 24.x указана дата 21 октября 2026 года. Ветка 26.x числится текущей, 22.x и 24.x - линии с долгосрочной поддержкой (Long Term Support, LTS). Наборы исправлений различаются: ошибка с полноширинными цифрами закрыта в 24.x и 26.x, а проблемы ZIP и шаблонов модели разрешений - только в 26.x.

Кроме того, обновили зависимости: c-ares (библиотека разрешения имён) до 1.34.9, OpenSSL до 3.5.9 в ветках 24.x и 22.x, SQLite до 3.53.4 в 22.x, Undici до 6.29.1 и 7.30.1. Список корневых сертификатов приведён к набору NSS 3.131.1, а цепочки с заблокированными открытыми ключами теперь отклоняются. Отдельно учли компрометацию промежуточного удостоверяющего центра eMudhra.

Администратору нужно определить свою ветку и поставить соответствующую версию целиком, а не отдельные модули.

Сведений об эксплуатации этих уязвимостей в реальных атаках вендор не приводит. При этом четыре из десяти ошибок касаются TLS и DNS, то есть проверки подлинности соединений, и три из них относятся к высокому уровню. Обновление закрывает весь набор сразу, тогда как частичные меры оставляют открытой хотя бы одну из ошибок.

Ссылки

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