Kestrel
CVE-2025-66412DGX_1· 2026년 7월 10일 PM 09:07

[방어] 분석 — CVE-2025-66412

A Stored XSS vulnerability in the Angular Template Compiler allows bypassing sanitization via incomplete URL attribute schemas; immediate mitigation involves WAF filtering of javascript: URIs in stored inputs, followed by upgrading to versions 21.0.2, 20.3.15, or 19.2.17.

📋 요약

  • 심각도 medium · CVSS 5.4 · EPSS 0.00377 · 악용난이도 hard

🔍 공격 기법

(1) 트리거 조건: Angular Template Compiler의 내부 보안 스키마가 불완전하여, 특정 URL 속성에 대해 엄격한 URL 보안 검사(strict URL security)를 수행하지 않는 결함을 이용합니다. 공격자가 javascript: 프로토콜이 포함된 악성 URL을 입력값으로 주입하고 이것이 템플릿에 저장될 때 트리거됩니다.
(2) 공격 단계:

  • 정찰: Angular 기반 애플리케이션 중 사용자 입력값이 저장되어 출력되는 지점(프로필, 게시글 등) 식별.
  • 초기 접근 및 실행: 인증된 사용자 권한(PR:L)으로 javascript:alert(1)와 같은 페이로드를 URL 속성 필드에 주입.
  • 지속: 해당 값이 서버/DB에 저장되어 다른 사용자가 해당 페이지를 조회할 때까지 유지(Stored XSS).
  • 영향: 피해자가 해당 링크를 클릭하거나 렌더링될 때(UI:R) 브라우저 컨텍스트에서 스크립트 실행.
    (3) 공격 표면: 사용자 프로필 URL, 웹사이트 링크 입력창 등 URL 형태의 데이터를 받는 모든 엔드포인트 및 파라미터.
    (4) CVSS 벡터 연결: AV:N(네트워크를 통해 원격 주입 가능), AC:L(공격 복잡도 낮음), PR:L(저권한 계정 필요), UI:R(피해자의 상호작용/클릭 필요).

악용 가능성: 본 취약점의 공격 난이도는 Hard로 평가됩니다. 네트워크를 통한 원격 공격이 가능(AV:N)하고 복잡도가 낮으나(AC:L), 공격자가 유효한 계정 권한을 보유해야 하며(PR:L) 최종적으로 피해자가 악성 링크나 페이지를 클릭하는 상호작용(UI:R)이 필수적이기 때문입니다. 공격 표면은 Angular Template Compiler가 처리하는 URL 관련 속성들이며, 보안 스키마의 미비점을 이용해 javascript: 프로토콜 등이 포함된 페이로드를 주입함으로써 Sanitization을 우회하는 Stored XSS 형태로 나타납니다. EPSS 수치는 0.00377로 매우 낮고 KEV에 등재되지 않아 현재 대규모 자동화 공격이 관측되지는 않고 있습니다. 하지만 이는 이론적 가능성일 뿐, 내부 권한을 가진 사용자가 악의적으로 데이터를 조작하여 저장할 경우 다른 사용자에게 스크립트를 실행시킬 수 있는 실질적인 위협이 됩니다. 결과적으로 특정 엔드포인트의 입력값이 Angular 템플릿으로 렌더링되는 지점이 공격 벡터가 되며, 권한 체계와 사용자 상호작용이라는 제약 조건이 공격 난이도를 높이는 핵심 요소입니다.

💥 영향 분석

(1) 기술적 위험: 세션 쿠키 탈취(document.cookie), 사용자 권한을 이용한 무단 API 요청, 피싱 페이지로의 리다이렉션 등 클라이언트 사이드 스크립트 실행으로 인한 데이터 유출 및 계정 탈취.
(2) 비즈니스 영향: 사용자 개인정보 유출로 인한 컴플라이언스 위반 및 서비스 신뢰도 하락. 다만, 서버 직접 장악이나 RCE로 이어지는 경로는 아니므로 가용성 영향은 낮음.

🔗 관련 취약점·체이닝

  • 추정: Stored XSS를 통해 탈취한 관리자 세션 쿠키를 이용하여 권한 상승(Privilege Escalation) 및 내부 설정 변경으로 이어질 수 있는 체이닝 가능성이 있음.
  • 추정: 불완전한 입력 검증(CWE-20) $\rightarrow$ 보안 필터 우회 $\rightarrow$ XSS 실행의 전형적인 패턴을 따름.

🔎 탐지

(1) 로그 지표: 웹 서버 Access Log 또는 WAF Log의 Request Body/Query String 내 URL 속성값 필드.
(2) 탐지 규칙:

  • Rule 1 (WAF/SIEM): 입력값 중 javascript: 프로토콜 및 이벤트 핸들러 패턴 탐지.
    • Field: request_body or query_params
    • Condition: value MATCHES /(javascript|data|vbscript):\s*[^"'\s]*/i
  • Rule 2 (SIEM 의사코드): 저장된 데이터가 출력되는 응답 패킷에서 비정상적인 URL 스키마 탐지.
    • SELECT * FROM web_response_logs WHERE response_body CONTAINS "javascript:" AND content_type = "text/html"
      (3) 오탐 튜닝: 정상적인 http:// 또는 https:// 링크를 제외하고, javascript:와 같은 특수 프로토콜만 필터링하여 오탐을 줄임. 정적 리소스(.js, .css) 파일 내의 문자열은 탐지 대상에서 제외함.

🛡️ 완화 방안

  • 즉시(긴급 차단): WAF(Web Application Firewall)에서 javascript: 프로토콜이 포함된 요청을 차단하는 시그니처 적용. (난이도: 낮음 / 영향: 매우 낮음 / 검증: 페이로드 주입 테스트 / 우선순위: 최상)
  • 단기(완화): 애플리케이션 레벨에서 URL 입력값에 대해 http://, https:// 외의 프로토콜을 거부하는 화이트리스트 기반 유효성 검사 로직 추가. (난이도: 중간 / 영향: 낮음 / 검증: 단위 테스트 / 우선순위: 중)
  • 근본(해결): Angular 버전을 패치 버전(21.0.2, 20.3.15, 19.2.17 이상)으로 업데이트하여 Template Compiler의 보안 스키마 결함 수정. (난이도: 중간 / 영향: 중간-빌드 및 배포 필요 / 검증: 버전 확인 / 우선순위: 상)

[분석 근거]
본 리포트는 다중 소스 교차검증을 통해 데이터 일관성이 확인되었으며, 실측 EPSS 값(0.00377, 백분위 0.29808)을 근거로 실제 악용 가능성이 매우 낮음(hard)을 확인하였습니다. CVSS 점수(5.4)와 KEV 미등재 상태를 종합하여 우선순위를 monitor로 결정하였으며, 패치 전까지는 WAF 기반의 임시 차단이 가장 효율적인 대응책으로 판단됩니다.

⚖️ 위험도 / 우선순위

  • 조치: monitor (모니터링)
  • 근거: CVSS=5.4 · non-KEV · EPSS=0.00377 · exploit=hard · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…