CS

SameSite란?

Ark B 2024. 10. 16. 13:22

SameSite란 쿠키를 설정할 때, 쿠키에 부여하는 속성 값이다.

SameSite의 옵션에는 None, Lax, Strict 이렇게 3가지가 존재한다.

 

출처 : https://www.youtube.com/watch?v=Q3YuKipzPbs

csrf 공격 시나리오
유저의 쿠키가 https://blog.dokydoky.com에  대해 남아 있는 상태에서 의심스러운 사이트 url을 클릭했다고 가정하면 저 api를 쏘면 session에 쿠키가 자동으로 적용돼 요청이 날아가기에 비밀번호가 변경되버리는 불상사가 발생한다.

 

이 공격이 가능했던 이유

첫번째, cross origin 사이에 write가 가능했다.

두번째, 유저의 패스워드 변경 요청을 할 때, 브라우저가 유저의 세션 쿠키 값을 붙혀서 전송하기 때문이다.

 

근데 이때 블로그 서버가 유저한테 세션 쿠키를 발행할 때 , SameSite 옵션을 Strict로 발행한다면

동일하게 유저가 공격사이트에 방문했을 때 쿠키값을 전송하지 않는다.

Strict 옵션인 경우 HTTP 목적지의 사이트와 현재 주소 표시창에 있는 사이트가 동일한 사이트일 경우에만 쿠키를 전송하게 된다.

 

동일한 Host? 동일한 Site?

Same Site의 판별기준은 .com, .net, .shop 과 같은 public suffix 기준으로 한단계 하위 도메인,

위의 예시에서 dokydoky.com 까지만 확인해서 이게 같으면 same site다 라고 판별한다.

 

Same Origin을 판별할 때는 Scheme, Host, Port 를 모두 본다.

SOP 정책!!

 

여기서 1번 2번 3번은 모두 Same Site이다.

4번 5번은 github.io 자체가 Public suffix이기 때문에 cross-site로 판별.