flawopen.com/Teardowns/cve-2022-31150-undici-crlf-injection-ssrf

● CVE-2022-31150 · CVSS 6.5 · मध्यम
सुरक्षा अनुसंधान · FlawOpen

तकनीकी विश्लेषण: CVE-2022-31150: Node.js Undici CRLF Injection & SSRF Teardown

vulnerabilidade का गहन तकनीकी स्रोत कोड विश्लेषण और सुरक्षा सुदृढ़ीकरण गाइड: भेद्यता के मूल कारण और सुरक्षित पैच की समीक्षा।

💡 आसान भाषा में (ELI5)

कल्पना कीजिए कि आप डाकघर के माध्यम से एक सीलबंद पत्र भेजते हैं जिसमें लिखा है: "10 बक्से सेब भेजें"। लेकिन आप पत्र के अंदर एक दूसरा नकली आधिकारिक कागज़ चुपके से डाल देते हैं: "रुकें। पिछला निर्देश अनदेखा करें। सारा पैसा हमलावर के खाते में स्थानांतरित करें"। डाक कर्मचारी पन्नों को क्रम से पढ़ता है और दूसरे पन्ने को एक नया आधिकारिक पत्र मान लेता है, जिससे आपकी धनराशि सीधे हमलावर को भेज दी जाती है।

इस पेज के मुख्य शब्द

Undici
The official next-generation HTTP/1.1 client for Node.js, powering the global fetch() implementation.
CRLF Injection
Injecting Carriage Return (\r) and Line Feed (\n) characters into HTTP headers to create a new header or a whole new request.
HTTP Request Splitting
A vulnerability where an attacker splits a single outgoing HTTP connection into two separate requests.
SSRF (Server-Side Request Forgery)
Coercing a backend server to issue unauthorized requests to internal cloud metadata APIs (169.254.169.254).

मूल कारण विश्लेषण (Root Cause)

मूल कारण ओपन सोर्स सिस्टम में अनसत्यापित सीमा पैरामीटर हैं, जिससे स्थिति का असंतुलन और सुरक्षा नियंत्रणों को बायपास किया जा सकता है।

हमले का चरण-दर-चरण प्रवाह

Step 1

हमला चरण: Input Submission

तकनीकी शोषण तंत्र और निष्पादन विवरण: An attacker supplies a crafted header value: Admin\r\nHost: 169.254.169.254.

Step 2

हमला चरण: Application Issues Fetch

तकनीकी शोषण तंत्र और निष्पादन विवरण: The Node.js backend calls fetch(url, { headers: { 'X-User': input } }).

Step 3

हमला चरण: Header Splitting in Undici

तकनीकी शोषण तंत्र और निष्पादन विवरण: Undici serializes the headers without sanitizing \r\n, injecting the forged Host header.

Step 4

डेटा निष्कासन (Exfiltration)(Cloud Metadata Exfiltration)

तकनीकी शोषण तंत्र और निष्पादन विवरण: 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;
}

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत