Доступны корректирующие выпуски серверной JavaScript-платформы Node.js 21.6.2, 20.11.1, 18.19.1, в которых исправлено 8 уязвимостей, из которых 4 присвоен высокий уровень опасности:
- CVE-2024-21892 – возможность подстановки непривилегированным пользователем кода, наследующего расширенные привилегии, с которыми выполняется рабочий процесс. Уязвимость вызвана ошибкой в реализации исключения, позволяющего в процессе с расширенными привилегиями обрабатывать переменные окружения, выставленные непривилегированным пользователем. Исключение должно было предоставляться только для полномочий CAP_NET_BIND_SERVICE, но из-за ошибки применялось и к некоторым другими полномочиям (capabilities).
- CVE-2024-22019 – отказ в обслуживании через исчерпание доступных ресурсов (нагрузка на CPU и расходование пропускной способности) при обработке встроенным HTTP-сервером
специально оформленных chunked-запросов, приводящих к чтению неограниченное количества байтов в одном соединении. - CVE-2024-21896 – выход за границу базового каталога в файловых путях. Уязвимость позволяет обойти нормализации файловых путей при помощи path.resolve() в случае передачи пути с использованием класса Buffer. Для получения подобного пути после проверки вызывается метод Buffer.from(), но в приложении может использоваться вызов Buffer.prototype.utf8Write, приводящий к замене содержимого на стадии после выполнения path.resolve() и возникновению уязвимости.
- CVE-2024-22017 – вызов setuid() не сбрасывал все привилегии. В частности, setuid() не влияет на операции io_uring, используемые в libuv, если они были инициализированы до вызова setuid().
- CVE-2023-46809 – уязвимость в API privateDecrypt(), допускающая применение атаки Marvin для расшифровки RSA на основе измерения времени операций.
- CVE-2024-21891 – возможность обхода модели прав доступа при использовании пользовательских обработчиков нормализации файловых путей.
- CVE-2024-21890 – некорректная обработка масок в параметрах “–allow-fs-read” и “–allow-fs-write”. Например, “–allow-fs-read=/home/node/.ssh/*.pub” приведёт предоставлению доступа ко всему содержимому “.ssh/”, а не только к файлам с расширением “.pub”, так как маска “*” обрабатывается как последний элемент пути.
- CVE-2024-22025 – отказ в обслуживании через израсходование ресурсов при декодировании сжатых данных в формате Brotli, полученных через вызов fetch().
Дополнительно можно отметить формирование выпуска библиотеки libuv 1.48.0, применяемой в Node.js для мультиплексирования соединений и асинхронной обработки ввода/вывода. Кроме Node.js библиотека также используется DNS-серверах BIND 9 и Knot DNS, HTTP-сервере H2O, Lua-фреймворке Luvit, виртуальной машине MoarVM, языке Julia и Python-фреймворке uvloop. В новой версии устранена уязвимость (CVE-2024-24806), проявляющаяся в проектах, использующих libuv, и позволяющая осуществить атаку SSRF (Server-side request forgery) для получения доступа к внутреннему API. Уязвимость возникла из-за обрезания имени хоста функцией uv_getaddrinfo() до 256 символов на этапе до резолвинга домена через функцию getaddrinfo(), что может привести к определению не того IP-адреса и обходу проверок. Например, сервисы типа MySpace, создающие поддомены вида “username.example.com”, можно атаковать через указание длинного имени пользователя.
Также вышло обновление используемого в Node.js HTTP-клиента undici 5.28.3, в котором устранена уязвимость (CVE-2024-24758), вызванная отсутствием очистки HTTP-заголовка Proxy-Authorization при перенаправлении запросов.