Bypass domain check protection with data: for XSS

오늘은.. 버그바운티 하다가 이런 형태의 XSS 코드도 가능하길래 공유드려봅니다.

<script src="data://www.trustdomain.hahwul.com, alert(45)"></script>

선행조건(Prerequisites)

  • 구문이 script src에 들어가는 경우(If the user input is in the script src)
  • 앞단 프로토컬 제어가 가능해야함(Must be able to control the src protocol)
  • Not CSP…

원리(How to?)

별다른건 아니고 script src의 데이터는 plain text의 javascript 코드가 들어가게 되는데, data 구문을 이용해서 코드를 넣어 실행할 수 있습니다.

여기서 요점은 ://domain 포맷의 검증 로직을 data:// domain 형태로 넣어서 우회하고 ,(comma) 로 앞의 도메인 부분을 인코딩인 것 처럼 속인 후 ,(comma)뒤에 payload를 두어 실행됩니다.

그러나 아쉽게도 CSP 때문에 유효타는 안나온 상태입니다. 잠도 안오는데 다시 하러 가야지

결국 CSP까지 풀고 성공했었네요 나이스 :D