[분석가] 분석 — CVE-2025-66412
A Stored XSS vulnerability in the Angular Template Compiler allows bypassing security sanitization via incomplete URL attribute schemas; upgrading to versions 21.0.2, 20.3.15, or 19.2.17 is the primary remediation.
📋 요약
- 심각도 medium · CVSS 5.4 · EPSS 0.00377 · 악용난이도 hard
🔍 공격 기법
- 트리거 조건: Angular Template Compiler의 내부 보안 스키마 결함으로 인해, 특정 URL 속성이 엄격한 URL 보안 검사 대상으로 분류되지 않아
javascript:와 같은 악성 프로토콜이 포함된 입력값이 필터링 없이 템플릿에 저장될 때 발생합니다. - 공격 단계:
- 정찰/초기접근: 공격자가 권한(
PR:L)을 가지고 사용자 입력이 템플릿으로 전달되는 지점을 식별합니다. - 실행 (Stored XSS): 보안 스키마가 누락된 URL 속성에
javascript:alert(1)형태의 페이로드를 주입하여 서버 또는 클라이언트 저장소에 저장합니다. - 트리거: 일반 사용자가 해당 콘텐츠를 렌더링하는 페이지에 접속하고, 특정 요소와 상호작용(
UI:R)할 때 스크립트가 실행됩니다.
- 정찰/초기접근: 공격자가 권한(
- 공격 표면: Angular 프레임워크를 사용하여 구축된 웹 애플리케이션의 사용자 입력 폼, 프로필 설정 등 저장형 데이터가 템플릿으로 렌더링되는 모든 엔드포인트입니다.
- CVSS 벡터 분석:
AV:N(네트워크 접근 가능),AC:L(공격 복잡도 낮음),PR:L(낮은 수준의 권한 필요),UI:R(사용자 상호작용 필수) 조건이 결합되어, 인증된 사용자가 악성 데이터를 심고 다른 사용자의 클릭을 유도하는 시나리오로 작동합니다.
악용 가능성: 본 취약점은 Angular Template Compiler의 내부 보안 스키마 미비로 인해 발생하는 Stored XSS이며, 공격 난이도는 Hard로 평가됩니다. 네트워크를 통한 원격 공격(AV:N)과 낮은 복잡도(AC:L)를 가지나, 유효한 사용자 권한(PR:L)이 필요하며 최종적으로 피해자의 상호작용(UI:R)이 트리거되어야 하므로 실제 악용 진입장벽이 높습니다. 공격 표면은 javascript: URL 등이 포함될 수 있는 특정 속성들을 처리하는 Angular 템플릿 컴파일러 엔드포인트 및 관련 파라미터입니다. EPSS 수치가 0.00377로 매우 낮고 KEV에 등재되지 않은 점은 현재 야생(In-the-wild)에서의 광범위한 악용 사례가 미관측되었음을 시사합니다. 따라서 이론적인 심각도와 달리, 공격자가 권한을 획득하고 정교하게 조작된 페이로드를 저장시킨 뒤 타겟의 실행을 유도해야 한다는 전제 조건으로 인해 실제 악용 가능성은 제한적입니다.
💥 영향 분석
- 기술적 위험:
- Stored XSS 실행: 피해자의 브라우저 컨텍스트에서 임의의 JavaScript가 실행됩니다.
- 세션 탈취:
document.cookie접근을 통한 세션 토큰 유출 및 계정 하이재킹이 가능합니다. - 피싱/데이터 변조: 페이지 내용을 동적으로 변경하여 가짜 로그인 폼을 노출하거나 사용자 데이터를 조작할 수 있습니다.
- 비즈니스 영향:
- 신뢰도 저하: 서비스 내에서 스크립트 실행이 가능함에 따라 플랫폼의 보안 신뢰성이 하락합니다.
- 컴플라이언스 위험: 개인정보 보호 규정(GDPR, ISMS-P 등) 관점에서 사용자 데이터 유출 사고로 이어질 수 있습니다.
- 노출 규모: Angular 18.x ~ 21.x 버전대 광범위한 제품군에 영향을 미치나, 실제 악용 가능성은 낮게 평가됩니다.
🔗 관련 취약점·체이닝
- 추정 체이닝 패턴: 본 취약점은 단독으로는 클라이언트 측 영향에 그치지만,
Stored XSS$\rightarrow$Session Hijacking$\rightarrow$Privilege Escalation(탈취한 세션이 관리자 권한일 경우)으로 이어지는 전형적인 권한 상승 체인을 형성할 수 있습니다. 또한 다른 CSRF 취약점과 결합하여 사용자 몰래 특정 동작을 수행하게 하는 형태로 활용될 가능성이 있습니다.
🔎 탐지
- 로그 지표: 웹 서버의 HTTP POST 요청 바디 또는 DB 저장 데이터 내 URL 속성 값에
javascript:,data:text/html등의 프로토콜 스킴이 포함되어 있는지 확인합니다. - 탐지 규칙 예시:
- Rule 1 (WAF/IDS):
request_body필드에서/(href|src|url)\s*=\s*["']\s*javascript:/i패턴 매칭 시 경보 발생. - Rule 2 (DB Scan): 저장된 HTML 템플릿 컬럼 내에서
javascript:문자열이 포함된 속성 검색.
- Rule 1 (WAF/IDS):
- 오탐 시나리오 및 튜닝: 정상적인 링크나 내부 스키마를 사용하는 경우 오탐이 발생할 수 있습니다. 단순 문자열 매칭보다는 Angular의 템플릿 문법(
[attr.xxx])과 결합된 패턴으로 정교화하여 탐지율을 높여야 합니다.
🛡️ 완화 방안
- 즉시 (긴급 차단): WAF(Web Application Firewall)에서
javascript:프로토콜이 포함된 입력값에 대해 차단 룰을 적용합니다. (난이도: 하 / 영향: 낮음 / 검증: 페이로드 전송 테스트) - 단기 (완화): 사용자 입력값에 대해 서버 측에서 화이트리스트 기반의 URL 유효성 검사(http, https만 허용)를 강제하는 필터를 추가합니다. (난이도: 중 / 영향: 보통 / 검증: 비정상 프로토콜 입력 시 거부 확인)
- 근본 (해결): Angular 버전을 보안 패치가 적용된 최신 버전으로 업그레이드합니다.
- 대상 버전:
21.0.2,20.3.15,19.2.17이상. - (난이도: 중 / 영향: 보통(버전 업데이트에 따른 회귀 테스트 필요) / 검증:
npm list @angular/core등으로 버전 확인)
- 대상 버전:
[분석 근거] 본 리포트는 다중 소스 교차검증을 통해 데이터 일관성이 확인되었으며, 실측 EPSS 값(0.00377, 백분위 0.29808)이 매우 낮아 실제 야생에서의 악용 가능성이 희박함을 확인했습니다. 이에 따라 CVSS 5.4(Medium)임에도 불구하고 KEV 미등재 및 낮은 EPSS 수치를 근거로 우선순위를 monitor 단계로 결정하였습니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.4 · non-KEV · EPSS=0.00377 · exploit=hard · in_scope=None