flawopen.com/Teardowns/cve-2022-31150-undici-crlf-injection-ssrf
vulnerabilidade का गहन तकनीकी स्रोत कोड विश्लेषण और सुरक्षा सुदृढ़ीकरण गाइड: भेद्यता के मूल कारण और सुरक्षित पैच की समीक्षा।
कल्पना कीजिए कि आप डाकघर के माध्यम से एक सीलबंद पत्र भेजते हैं जिसमें लिखा है: "10 बक्से सेब भेजें"। लेकिन आप पत्र के अंदर एक दूसरा नकली आधिकारिक कागज़ चुपके से डाल देते हैं: "रुकें। पिछला निर्देश अनदेखा करें। सारा पैसा हमलावर के खाते में स्थानांतरित करें"। डाक कर्मचारी पन्नों को क्रम से पढ़ता है और दूसरे पन्ने को एक नया आधिकारिक पत्र मान लेता है, जिससे आपकी धनराशि सीधे हमलावर को भेज दी जाती है।
Undicifetch() implementation.CRLF Injection\r) and Line Feed (\n) characters into HTTP headers to create a new header or a whole new request.HTTP Request SplittingSSRF (Server-Side Request Forgery)169.254.169.254).मूल कारण ओपन सोर्स सिस्टम में अनसत्यापित सीमा पैरामीटर हैं, जिससे स्थिति का असंतुलन और सुरक्षा नियंत्रणों को बायपास किया जा सकता है।
तकनीकी शोषण तंत्र और निष्पादन विवरण: An attacker supplies a crafted header value: Admin\r\nHost: 169.254.169.254.
तकनीकी शोषण तंत्र और निष्पादन विवरण: The Node.js backend calls fetch(url, { headers: { 'X-User': input } }).
तकनीकी शोषण तंत्र और निष्पादन विवरण: Undici serializes the headers without sanitizing \r\n, injecting the forged Host header.
तकनीकी शोषण तंत्र और निष्पादन विवरण: The internal proxy directs the request to the cloud metadata service, exposing AWS/GCP credentials.
// VULNERABLE: lib/core/request.js before patch
function addHeader(headers, key, value) {
// ROOT CAUSE:
// Does not sanitize or reject carriage return (\r) and line feed (\n) in values!
// Allows attackers to split headers and inject arbitrary HTTP directives!
headers[key] = value;
}
// SECURE: lib/core/request.js patch
function addHeader(headers, key, value) {
// 1. Strict regex checking for dangerous control characters
const INVALID_HEADER_CHAR_REGEX = /[\r\n]/;
if (INVALID_HEADER_CHAR_REGEX.test(key) || INVALID_HEADER_CHAR_REGEX.test(value)) {
throw new TypeError(`Invalid character in header content: ["${key}": "${value}"]`);
}
headers[key] = value;
}
\r and \n characters from HTTP request header keys and values।169.254.169.254, 10.0.0.0/8, 127.0.0.1) using egress firewall rules को अक्षम या प्रतिबंधित करें।undici and Node.js dependencies updated to latest patch releases।