WEB hacking/PortSwigger

Lab: SameSite Strict bypass via client-side redirect 문제 풀이(WriteUp)

Roronoa 2025. 6. 15. 00:06
반응형

문제 설명

CSRF 공격을 통해 사용자 email을 변경하면 문제가 해결된다.

문제 설명

문제 풀이

로그인 시 session의 SameSite 값이 Strict로 설정되어 있다.

로그인 요청 패킷

 

My Account 페이지에 접근한 후 이메일 변경을 요청한다.

이메일 변경 요청

 

이메일 요청 결과 Burpsuite 패킷에서 csrf 토큰이 존재하지 않는다.

이메일 변경 요청시 CSRF 토큰 미존재

 

GET 메소드로 변환하여 전송할 시 csrf 토큰 없이도 이메일 변경이 가능하다. 하지만 SameSite가 Strict로 설정되어 다른 Origin에서 CSRF 공격을 성공할 수 없기 때문에 같은 Origin에서 CSRF 공격을 성공할 수 있는 취약점을 찾아 연계하여야한다.

GET 메소드 요청

 

블로그 포스트에 접근한 후 Comment를 작성한다.

블로그 Comment 작성

 

블로그 Comment 작성 후 /post/comment/confirmation?postId=3 요청을 진행하며 몇초 후 post 페이지로 리다이렉트 된다. 리다리렉트 되는 구문이 현재 html에는 존재하지 않기 때문에 자바스크립트를 확인한다.

Comment 작성 후 요청 패킷

 

자바스크립트 확인시 postId를 받아 리다이렉트를 진행한다.

아래와 같이 postId값을 전달할 경우 window.location = '/post' + '/' + '../'; 이되어 루트 경로로 이동할 것이라고 추측이 된다. 이를 통해 postId 값을 변조하여 같은 Origin으로의 리다이렉트가 가능하다.

https://0adf00910313043381580774003700ef.web-security-academy.net/post/comment/confirmation?postId=../

리다이렉트 함수

 

POC

피해자가 아래 코드가 존재하는 페이지에 접근할 경우 confirmation 경로에 리다이렉트되며, 3초 후 같은 Origin인 이메일 변경 요청 패킷 페이지로 리다이렉트되어 이메일이 변경된다.

<script>
  location.href = "https://0adf00910313043381580774003700ef.web-security-academy.net/post/comment/confirmation?postId=../my-account/change-email?email=wiener123%40normal-user.net%26submit=1"
</script>

 

POC를 사용자에게 전송하여 문제를 해결한다.

문제 해결

반응형