Shadow DOM XSS 헌팅 포인트
최근 프런트엔드는 Web Components를 써서 Shadow DOM 안에 UI를 숨깁니다. 그런데 sanitizer가 light DOM만 검사하는 경우가 있어요. 이때 attachShadow({mode:"open"})로 노출된 root를 통해 unsafe HTML을 주입하면 XSS로 이어질 수 있습니다.
체크리스트
innerHTML,insertAdjacentHTML가 shadowRoot 내부에서 쓰이는지 확인- CSP가 있어도 trustedTypes 미설정이면 우회 여지가 큼
- 프레임워크 템플릿이
dangerouslySetInnerHTML류 옵션을 제공하는지 확인
간단 PoC 흐름
- 사용자 입력이 컴포넌트 props로 전달
- props를 그대로 HTML로 렌더링
- open shadowRoot에서 스크립트 실행
대응
Shadow 내부도 동일한 sanitizer/템플릿 정책을 적용하고, 가능하면 mode:"closed" + Trusted Types를 강제하세요.