Влияние. Когда приложение передает управляемый пользователем ввод в параметр обновления client.request(), злоумышленник может внедрить последовательности CRLF (\r\n), чтобы:
* Внедрение произвольных HTTP-заголовков
* Преждевременно завершить HTTP-запрос и переправить необработанные данные в службы, отличные от HTTP (Redis, Memcached, Elasticsearch).
Уязвимость существует, поскольку undici записывает значение обновления непосредственно в сокет без проверки недопустимых символов заголовка:
// lib/dispatcher/client-h1.js:1121
если (обновление) {
заголовок += `соединение: обновление\r\nupgrade: ${upgrade}\r\n`
}
Показать оригинальное описание (EN)
ImpactWhen an application passes user-controlled input to the upgrade option of client.request(), an attacker can inject CRLF sequences (\r\n) to: * Inject arbitrary HTTP headers * Terminate the HTTP request prematurely and smuggle raw data to non-HTTP services (Redis, Memcached, Elasticsearch) The vulnerability exists because undici writes the upgrade value directly to the socket without validating for invalid header characters: // lib/dispatcher/client-h1.js:1121 if (upgrade) { header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n` }
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 2
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Nodejs Undici
cpe:2.3:a:nodejs:undici:*:*:*:*:*:node.js:*:*
|
— |
6.24.0
|
|
Nodejs Undici
cpe:2.3:a:nodejs:undici:*:*:*:*:*:node.js:*:*
|
7.0.0
|
7.24.0
|