[방어] 분석 — CVE-2026-22610
An XSS vulnerability in the Angular Template Compiler allows script execution via unsanitized SVG
hrefandxlink:hrefattributes; immediate mitigation involves WAF filtering of these patterns until updating to patched versions.
📋 요약
- 심각도 medium · CVSS 6.1 · EPSS 0.00444 · 악용난이도 hard
🔍 공격 기법
(1) 트리거 조건: Angular Template Compiler의 내부 Sanitization 스키마가 SVG <script> 요소 내의 href 및 xlink:href 속성을 Resource URL 컨텍스트로 인식하지 못해 필터링을 우회하는 결함입니다.
(2) 공격 단계:
- 정찰: 타겟 애플리케이션이 영향을 받는 Angular 버전을 사용하는지 확인합니다.
- 초기 접근: 사용자가 악의적으로 조작된 SVG 태그가 포함된 링크나 콘텐츠를 클릭/열람하도록 유도합니다 (UI:R 조건).
- 실행: 브라우저가 렌더링 과정에서
href또는xlink:href에 삽입된 JavaScript 코드를 실행합니다.
(3) 공격 표면: 사용자 입력값이 Angular 템플릿을 통해 동적으로 렌더링되는 모든 UI 컴포넌트 및 SVG 데이터 처리 엔드포인트입니다.
(4) CVSS 벡터 분석:AV:N/AC:L/PR:N/UI:R에 따라 네트워크를 통해 인증 없이 공격 가능하나, 피해자가 특수하게 조작된 콘텐츠와 상호작용해야 하는 '사용자 개입'이 필수적인 조건입니다. - 개념 예시:
<svg><script xlink:href="javascript:alert(1)"></script></svg>형태의 페이로드가 Sanitization을 우회하여 삽입됩니다.
악용 가능성: 본 취약점은 Angular Template Compiler의 SVG <script> 요소 내 href 및 xlink:href 속성에 대한 Sanitization 미흡으로 발생하는 XSS입니다. 공격자는 네트워크를 통해 접근 가능하며(AV:N), 특별한 권한 없이도(PR:N) 낮은 복잡도로 페이로드를 구성할 수 있으나(AC:L), 최종 실행을 위해서는 사용자의 상호작용(UI:R)이 반드시 필요하므로 전체적인 공격 난이도는 'Hard'로 판정됩니다. 주요 공격 표면은 사용자 입력값이 렌더링되는 Angular 템플릿 내의 SVG 요소 및 관련 속성 파라미터입니다. EPSS 수치가 0.00444로 낮고 KEV에 등재되지 않은 점은 현재까지 실제 야생(In-the-wild)에서의 대규모 악용 사례가 드물다는 것을 의미합니다. 하지만 이론적 심각도와 별개로, 신뢰하는 서비스의 페이지 내에서 SVG 파일을 통해 스크립트가 실행될 경우 세션 탈취 등의 실질적인 위협으로 이어질 수 있습니다. 따라서 공격자가 정교하게 설계한 피싱 링크나 악성 SVG 콘텐츠를 사용자가 클릭하도록 유도하는 시나리오가 핵심 악용 경로가 됩니다.
💥 영향 분석
(1) 기술적 위험: Client-side XSS가 발생하여 사용자의 세션 쿠키 탈취, 로컬 스토리지 접근, 페이지 변조 및 피싱 사이트로의 리다이렉션이 가능합니다. (S:C 벡터에 따라 Scope 변경이 발생하여 권한 범위가 확장될 수 있음)
(2) 비즈니스 영향: 사용자 계정 탈취로 인한 개인정보 유출 위험이 있으며, 서비스 신뢰도 하락 및 웹 보안 컴플라이언스 위반 가능성이 존재합니다.
🔗 관련 취약점·체이닝
- 추정: 본 취약점은 단독으로 실행되나, 다른 'Open Redirect' 또는 'CSRF' 취약점과 체이닝될 경우 공격자가 피해자의 브라우저 내에서 권한 있는 요청을 강제로 수행하게 하여 영향력을 확대할 수 있을 것으로 추정됩니다.
🔎 탐지
(1) 로그 지표: WAF/IDS의 HTTP Request Body 및 Query String 필드에서 SVG 태그와 JavaScript 프로토콜이 결합된 패턴을 모니터링합니다.
(2) 탐지 규칙 예시:
- Rule 1 (WAF/SIEM):
request_body또는url_query필드에<script와xlink:href가 동시에 등장하고javascript:문자열이 포함된 경우. - 정규식 예시:
(?i)<script\s+[^>]*?(?:xlink:)?href\s*=\s*["']\s*javascript:[^"']*["'] - 의사코드:
IF (payload CONTAINS "<svg") AND (payload MATCHES /xlink:href=["']javascript:/i) THEN ALERT "CVE-2026-22610 Attempt"
(3) 오탐 시나리오 및 튜닝: 정상적인 SVG 이미지 파일 업로드나 기술 문서 공유 서비스에서xlink:href를 사용하는 경우 오탐이 발생할 수 있습니다. 이를 줄이기 위해javascript:프로토콜의 존재 여부를 필수 조건으로 결합하고, 정적 자산 경로(.svg,.png)에 대한 요청은 제외 처리합니다.
🛡️ 완화 방안
- 즉시(긴급 차단): WAF에서
xlink:href="javascript:...및href="javascript:...패턴을 포함하는 HTTP 요청을 차단(Block)하도록 시그니처를 적용합니다. (난이도: 저 / 영향: 낮음 / 검증: 페이로드 전송 시 403 Forbidden 확인 / 우선순위: 최상) - 단기(완화): Content Security Policy(CSP)를 강화하여
script-src에서 인라인 스크립트 및 신뢰되지 않은 출처의 실행을 제한합니다. (난이도: 중 / 영향: 중간-일부 기능 오작동 가능성 / 검증: 브라우저 콘솔 CSP Violation 로그 확인 / 우선순위: 중) - 근본(해결): Angular 버전을 다음 패치 버전 이상으로 업그레이드합니다:
19.2.18,20.3.16,21.0.7,21.1.0-rc.0. (난이도: 중 / 영향: 낮음-회귀 테스트 필요 / 검증:npm list @angular/core버전 확인 / 우선순위: 상)
[분석 근거]
본 리포트는 다중 소스 데이터의 일관성이 확인된(신뢰도 1.0) 사실을 바탕으로 작성되었습니다. 실측 EPSS 값은 0.00444(백분위 0.35701)로 매우 낮으며, 이는 이론적 심각도(CVSS 6.1)와 별개로 실제 야생에서의 악용 가능성이 현재로서 극히 낮음을 의미합니다. 따라서 KEV 미등재 및 exploit=hard 등급을 고려하여 우선순위를 monitor(모니터링) 수준으로 결정하였습니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=6.1 · non-KEV · EPSS=0.00444 · exploit=hard · in_scope=None