[공격] 분석 — CVE-2025-66035
Angular HttpClient leaks XSRF tokens via protocol-relative URLs (//), requiring an immediate update to versions 19.2.16, 20.3.14, or 21.0.1 and avoidance of
//prefixes in request URLs.
📋 요약
- 심각도 미상 · CVSS 미상 · EPSS 0.00572 · 악용난이도 hard
🔍 공격 기법
(1) 트리거 조건: Angular HttpClient가 요청 URL의 시작 부분을 검사하여 Cross-Origin 여부를 판단할 때, http:// 또는 https://가 아닌 Protocol-relative URL(//)로 시작하는 주소를 Same-origin으로 오판하여 X-XSRF-TOKEN 헤더를 자동으로 추가하는 로직 결함.
(2) 공격 단계:
- 정찰: 타겟 애플리케이션이 Angular 기반이며, 사용자 입력을 통해 외부 API 호출 URL을 동적으로 생성하거나 설정 파일에서 URL을 불러오는지 확인.
- 초기 접근: 공격자가 제어하는 도메인으로 유도하는 Protocol-relative URL(
//attacker.com/leak)을 포함한 링크를 피해자에게 전달(Phishing 등). - 실행 및 정보 획득: 피해자가 해당 링크를 클릭하거나 앱 내에서 트리거될 때, Angular
HttpClient가 이를 Same-origin으로 인식하여 요청 헤더에 XSRF 토큰을 실어 공격자 서버로 전송. - 영향: 공격자는 자신의 웹 서버 로그를 통해 유출된 XSRF 토큰을 획득.
(3) 공격 표면:
- 노출 지점:
HttpClient를 사용하는 모든 API 요청 엔드포인트 및 URL 파라미터. - 프로토콜: HTTP/HTTPS (XSRF 토큰 전송 단계).
(4) 실전 조건 연결:
- AV(Network): 원격에서 링크 클릭 유도로 가능.
- AC(Low): 특정 URL 패턴(
//)만 사용하면 되므로 난이도 낮음. - PR(None): 인증된 사용자라면 누구나 대상이 됨.
- UI(Required): 피해자가 공격자가 설계한 경로로 요청을 보내도록 하는 상호작용 필요.
악용 가능성: 본 취약점은 HttpClient가 프로토콜 상대 경로(//)를 동일 출처(Same-origin)로 오판하여 XSRF 토큰을 자동으로 첨부하는 로직 결함으로, 공격 난이도는 Hard로 평가됩니다. 공격자는 피해자가 악성 링크를 클릭하게 하여 특정 API 호출을 유도해야 하며, 이는 UI 상호작용과 외부 도메인으로의 리다이렉션이라는 전제조건(AV:N/AC:L/PR:N/UI:R)을 필요로 합니다. 공격 표면은 Angular 애플리케이션 내에서 외부 API와 통신하는 모든 HttpClient 요청 엔드포인트 및 URL 파라미터입니다. EPSS 수치가 0.00572로 낮고 KEV에 등재되지 않은 점은 현재 대규모 자동화 공격이 이루어지고 있지는 않음을 시사하나, XSRF 토큰 유출 시 세션 하이재킹이나 권한 상승으로 이어질 수 있는 치명적인 전제조건을 제공합니다. 결과적으로 이론적 심각도는 높으나, 실제 악용을 위해서는 정교하게 설계된 피싱 페이지와 타겟 애플리케이션의 특정 요청 구조를 이용해야 하므로 실전 실행 가능성은 제한적입니다.
💥 영향 분석
(1) 기술적 위험: X-XSRF-TOKEN의 무단 유출(Info-Disclosure). 공격자가 탈취한 토큰을 이용해 사용자의 권한으로 서버에 요청을 보내는 XSRF 공격의 전제 조건을 충족함.
(2) 비즈니스 영향: 사용자 세션 하이재킹 및 권한 오용으로 인한 데이터 변조/삭제 위험. 개인정보 보호 규정 준수 위반 및 서비스 신뢰도 하락.
🔗 관련 취약점·체이닝
- 체이닝 경로:
Info-Disclosure (XSRF Token Leak)$\rightarrow$Cross-Site Request Forgery (XSRF)$\rightarrow$Unauthorized Action Execution. - 추정: 단독으로는 정보 유출에 그치지만, 서버 측에서 XSRF 토큰 검증 외에 추가적인 요청 검증(예: Custom Header 확인 부족)이 미흡할 경우, 탈취한 토큰을 이용해 관리자 기능 실행이나 계정 설정 변경 등의 권한 상승/오용으로 이어질 수 있음.
🔎 탐지
(1) 로그 지표: 웹 서버 Access Log 및 WAF 로그에서 요청 URL이 //로 시작하며, 동시에 X-XSRF-TOKEN 헤더가 포함되어 외부 도메인으로 나가는 패턴 확인.
(2) 탐지 규칙 예시:
- Logic:
request_url matches /^\/\// AND headers contains "X-XSRF-TOKEN" AND destination_domain != internal_trusted_domain - SIEM (Pseudo):
SELECT * FROM http_logs WHERE url LIKE '//%' AND header.x_xsrf_token IS NOT NULL
(3) 오탐 시나리오: 개발 환경에서 의도적으로 Protocol-relative URL을 사용하는 경우. 내부 신뢰 도메인 리스트(Allowlist)를 적용하여 필터링함으로써 튜닝 가능.
🛡️ 완화 방안
- 즉시(긴급 차단):
HttpClient요청 시 사용되는 모든 URL에서//접두사 제거 및 절대 경로(/) 또는 완전한 정규 URL(https://...)로 강제 변경. (난이도: 중 / 영향: 코드 수정 필요, 기능 정상 작동 여부 확인 필수) - 단기(완화): WAF 등 네트워크 보안 장비에서 외부 도메인으로 향하는 요청 중
X-XSRF-TOKEN헤더가 포함된 패킷을 차단하도록 규칙 설정. (난이도: 하 / 영향: 가용성 영향 적음) - 근본(해결): Angular 버전을
19.2.16,20.3.14,21.0.1이상으로 업그레이드. (난이도: 하 / 영향: 라이브러리 의존성 체크 필요, 가장 확실한 해결책)
[파이프라인 근거] 본 분석은 다중 소스 교차검증을 통해 Angular HttpClient의 URL 판단 로직 결함을 확인했으며, 실측 EPSS 0.00572(백분위 0.43257) 수치를 근거로 실제 악용 가능성이 이론적 심각도보다 낮음을 인지함. 이에 따라 KEV 미등재 및 exploit=hard 조건을 반영하여 우선순위를 monitor로 결정함.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=미상 · non-KEV · EPSS=0.00572 · exploit=hard · in_scope=None