SameSite cookie에 관하여

김성진·2022년 12월 4일
0


📒 1. First-Party, Third-Party

먼저 쿠키에는 First-Party, Third-Party가 있다.

간단히 설명하자면 First Party는 쿠키가 설정된 서버에서, 동일한 서버로 가는 쿠키이다.

Third Party는 다른 domain으로 이동하는 쿠키이다.

예를 들어 네이버 블로그에 유튜브 동영상을 넣을 수 있는데, 그럴 때는 서드파티가 맞지 않을까 싶다.


📒 2. What is SameSite Cookie

그래서 SameSite Cookie가 도대체 뭘까.
SameSite Cookie는 보안상의 목적으로 만들어졌다. 좀 더 정확히 말하자면 CSRF를 막기 위해서이다.

📖 Lax

Lax는 몇 가지 예외적인 요청을 제외하고는 ThirdParty Cookie가 전송되지 않는다.
그리고 최신 브라우저들의 경우 SameSite값이 설정되어있지 않다면 Lax가 기본값이라 한다.

즉, Lax는 쿠키를 보내기 전에 SameSite인지 확인을 한 후, 소수의 경우를 제외하고는 쿠키를 보내지 않는 것이다.

그렇다면 그 예외적인 요청은 무엇일까?

https://www.invicti.com/blog/web-security/same-site-cookies-by-default/
바로 위의 경우들이다. 저기서 Lax를 보면 POST는 되지 않지만 GET의 경우에는 허용하는 것이 보인다. 내가 풀었던 CSRF관련 워게임 문제들은 주로 돈 옮기거나, 계정 변경하는 등의 문제들이 많았는데 다 POST Method로 진행되는 방법들이었다. 만약 Lax로 SameSite Cookie가 설정되어 있다면 불가능해질 것 같다.
아 같은 서버 내에서는 되겠구나

📖 Strict

Strict는 무조건 First Party만 제공된다. 다른 말은 필요하지 않을 것 같다.

📖 None

Lax에서 나온 표의 Normal이 None이랑 같다. 즉, 모든 경우에 대해 Third Party Cookie가 제공된다.

매우 취약할 것 같다.

그래서 Normal로 사용하려면 Cookie가 Secret Cookie여야 한다. 쿠키 서명을 말하는 듯 하다.

라고 생각했는데 + https도 말하는 것이다.


📒 So why is it safe?

근데 안전한 이유는 당연하다.
Strict : Third Party Cookie 절대 안주므로 안전.
Lax : 안전한 요청에만 Third Party Cookie 제공.
None : Third Party 무조건 주지만, Secret이라 안전.

나는 이렇게 생각한다.


📒 So why default is Lax?

그래서 왜 크롬 80부터 SameSite 기본 값을 Lax로 잡는걸까
Strict로 잡으면 더 안전하지 않을까 ...?

근데 그건 그냥 개발, 사용의 편의성을 위해 사용하는 것이다. Strict가 더 안전한 것은 맞지만, 기본을 Lax로 설정한다 하더라도 어느 정도의 보안성은 잡을 수 있고 심지어 a태그 같은 부분에서도 쿠키가 안넘어가질 수 있기 때문이다.

profile
Today I Learned

0개의 댓글