본문으로 건너뛰기

Shadow DOM XSS 헌팅 포인트

최근 프런트엔드는 Web Components를 써서 Shadow DOM 안에 UI를 숨깁니다. 그런데 sanitizer가 light DOM만 검사하는 경우가 있어요. 이때 attachShadow({mode:"open"})로 노출된 root를 통해 unsafe HTML을 주입하면 XSS로 이어질 수 있습니다.

체크리스트

  • innerHTML, insertAdjacentHTMLshadowRoot 내부에서 쓰이는지 확인
  • CSP가 있어도 trustedTypes 미설정이면 우회 여지가 큼
  • 프레임워크 템플릿이 dangerouslySetInnerHTML 류 옵션을 제공하는지 확인

간단 PoC 흐름

  1. 사용자 입력이 컴포넌트 props로 전달
  2. props를 그대로 HTML로 렌더링
  3. open shadowRoot에서 스크립트 실행

대응

Shadow 내부도 동일한 sanitizer/템플릿 정책을 적용하고, 가능하면 mode:"closed" + Trusted Types를 강제하세요.