[공격] 분석 — CVE-2025-66412
Stored XSS in Angular Template Compiler allows bypassing sanitization via incomplete URL attribute schemas; update to versions 21.0.2, 20.3.15, or 19.2.17 immediately.
📋 요약
- 심각도 medium · CVSS 5.4 · EPSS 0.00377 · 악용난이도 hard
🔍 공격 기법
(1) 트리거 조건: Angular Template Compiler의 내부 보안 스키마 결함으로 인해, 특정 URL 속성이 'Strict URL Security' 대상으로 분류되지 않아 javascript: 프로토콜과 같은 악성 스크립트 주입이 가능함.
(2) 공격 단계:
- 정찰: 대상 애플리케이션이 사용하는 Angular 버전 확인 및 사용자 입력값이 템플릿으로 컴파일되어 저장되는 지점 탐색.
- 초기 접근: 인증된 권한(
PR:L)을 가진 공격자가 프로필 설정, 게시글 작성 등 데이터가 저장되는 엔드포인트에 접근. - 실행:
javascript:alert(1)형태의 페이로드를 URL 속성에 주입하여 서버에 저장(Stored). - 영향: 일반 사용자가 해당 페이지를 방문(
UI:R)할 때 브라우저에서 스크립트가 자동 실행됨.
(3) 공격 표면:
- 엔드포인트: 사용자 정의 URL, 링크 설정, 프로필 정보 수정 등 입력값이 DB에 저장된 후 Angular 템플릿을 통해 렌더링되는 모든 파라미터.
- 함수/컴포넌트:
Angular Template Compiler및 관련 Sanitizer.
(4) CVSS 벡터 분석:
AV:N: 네트워크를 통해 원격 공격 가능.AC:L: 공격 복잡도가 낮음.PR:L: 최소한의 사용자 권한 필요 (입력값 저장 단계).UI:R: 피해자가 해당 페이지를 렌더링해야 하는 상호작용 필수.
악용 가능성: 본 취약점은 Angular Template Compiler의 내부 보안 스키마 결함으로 인해 발생하는 Stored XSS이며, 공격 난이도는 Hard로 평가됩니다. 네트워크를 통한 원격 공격(AV:N)과 낮은 복잡도(AC:L)를 가지나, 공격자가 유효한 계정 권한을 보유(PR:L)해야 하며 최종적으로 피해자의 상호작용(UI:R)이 필수적인 전제조건을 가집니다. EPSS 수치가 0.00377로 매우 낮고 KEV에 등재되지 않은 점은, 단순한 스크립트 주입을 넘어 실제 서비스 환경에서 유효한 페이로드를 전달하고 실행시키기 위한 제약 사항이 많음을 시사합니다. 공격 표면은 사용자가 입력한 데이터가 Angular 템플릿으로 컴파일되어 렌더링되는 모든 엔드포인트와 URL 속성 파라미터에 노출됩니다. 특히 javascript: 프로토콜을 필터링하지 못하는 특정 URL 홀딩 속성이 핵심 트리거 지점이 됩니다. 결과적으로 공격자는 권한을 이용해 악의적인 URL 스키마를 저장소에 주입하고, 일반 사용자가 해당 요소를 클릭하도록 유도하여 브라우저 컨텍스트에서 임의 코드를 실행시키는 경로를 취하게 됩니다.
💥 영향 분석
(1) 기술적 위험: Stored XSS로 인해 세션 쿠키 탈취(Session Hijacking), CSRF 토큰 유출, 사용자 권한을 이용한 임의 API 요청 수행 가능.
(2) 비즈니스 영향: 관리자 계정 탈취 시 서비스 설정 변경 및 민감 데이터 노출 가능성. 다수의 사용자가 영향을 받는 Stored XSS 특성상 브랜드 신뢰도 하락 및 컴플라이언스 위반 위험 존재.
🔗 관련 취약점·체이닝
- 추정 체이닝:
Stored XSS$\rightarrow$Session Token Theft$\rightarrow$Privilege Escalation. - 패턴 분석: 단순 스크립트 실행에 그치지 않고, 탈취한 세션을 이용해 권한이 높은 계정(Admin)으로 위장하여 내부 설정 변경이나 데이터 대량 추출로 이어지는 체인이 가능함. 또한, 브라우저 내 저장된 LocalStorage/SessionStorage의 민감 정보 유출과 결합될 수 있음.
🔎 탐지
(1) 로그 지표: HTTP Request Body 또는 DB 저장 쿼리 로그에서 URL 속성에 javascript: 키워드가 포함된 패턴 확인.
(2) 탐지 규칙 예시:
- Rule 1 (WAF/IDS):
Request_Bodycontains/(?:href|src)=["']?javascript\s*:/i - Rule 2 (SIEM):
SELECT * FROM logs WHERE payload LIKE '%javascript:%' AND endpoint IN ('/api/user/profile', '/api/post/create')
(3) 오탐 시나리오: 정당한 URL 설명이나 문서 내에javascript:문자열이 포함된 경우. - 튜닝: 단순 문자열 매칭보다는 HTML 태그의 속성(
href,src등) 내부에서 프로토콜로 사용되는지 확인하는 정규식 정밀화 필요.
🛡️ 완화 방안
- 즉시(긴급 차단): WAF에서
javascript:프로토콜이 포함된 입력값에 대해 Block 설정. (난이도: 저 / 영향: 낮음 / 검증: 페이로드 전송 시 403 응답 확인) - 단기(완화): 서버 사이드에서 URL 입력값에 대해 화이트리스트 기반 프로토콜 필터링(
http,https,mailto만 허용) 적용. (난이도: 중 / 영향: 보통 / 검증: 비정상 프로토콜 입력 시 에러 처리 확인) - 근본(해결): Angular 버전을 21.0.2, 20.3.15, 또는 19.2.17 이상으로 업그레이드. (난이도: 중 / 영향: 보통 - 버전 간 Breaking Changes 검토 필요 / 검증:
ng version확인 및 패치 버전 적용 후 PoC 테스트)
[분석 근거]
- 본 리포트는 다중 소스 교차검증을 통해 데이터 일관성이 확인되었으며, 실측 EPSS(0.00377, 백분위 0.29808)를 바탕으로 실제 악용 가능성이 낮음(
hard)을 반영함. - CVSS 5.4 및 non-KEV 상태, 낮은 EPSS 수치를 근거로 우선순위를
monitor로 결정하여 보고함.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.4 · non-KEV · EPSS=0.00377 · exploit=hard · in_scope=None