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 }
{
"binaries": [
{
"binary_version": "9.2.1~7.3.0+dfsg1+~cs24.12.11-2",
"binary_name": "libllhttp-dev"
},
{
"binary_version": "9.2.1~7.3.0+dfsg1+~cs24.12.11-2",
"binary_name": "libllhttp9.2"
},
{
"binary_version": "9.2.1~7.3.0+dfsg1+~cs24.12.11-2",
"binary_name": "node-llhttp"
},
{
"binary_version": "7.3.0+dfsg1+~cs24.12.11-2",
"binary_name": "node-undici"
}
]
}