0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】Chrome の SameSite 例外仕様(2 分ルール)

0
Posted at

はじめに

― なぜ「Lax なのに POST が通る」のか ―

SameSite Cookie は、CSRF 対策として 事実上の標準防御になりました。
特に近年は、主要ブラウザ(例:Google Chrome)が SameSite=Lax をデフォルト挙動にしたことで、

「SameSite を書いていない = ある程度安全」

と誤解されがちです。

しかし Chrome には、明確に仕様化された例外があります。
それがいわゆる 「2 分ルール」 です。

本記事では、

  • 2 分ルールとは何か
  • なぜ Chrome がこの仕様を入れたのか
  • 攻撃者はどこを突くのか
  • 開発者・ペンテスターが取るべき対策

設計思想レベルから解説します。


SameSite の前提

Chrome の現在の基本挙動は以下です。

Cookie の状態 Chrome の扱い
SameSite=Strict 同一サイトのみ送信
SameSite=Lax トップレベル GET のみ送信
SameSite=None; Secure すべて送信
SameSite 未指定 Lax として扱う

ここまでが「多くの人が知っている話」です。


問題の核心:2 分ルールとは?

公式仕様を一文で要約すると

SameSite 属性が指定されていない Cookie は、
設定または更新から 2 分以内であれば、
POST を含むクロスサイトリクエストでも送信される。

つまり Chrome は、

  • Cookie が「新しすぎる」場合
  • 一時的に SameSite 制限を緩和する

という動きをします。


なぜこんな例外が存在するのか?

背景:Web を壊さないための妥協

SameSite が導入された当初、現実の Web には次のようなサイトが大量に存在していました。

  • SameSite を 一切指定していない
  • ログイン直後に:
    • POST フォーム送信
    • OAuth コールバック
    • iframe 連携

Chrome がいきなり
「SameSite 未指定 = Lax(POST 禁止)」
を厳格適用すると、

世界中の既存サイトが一斉に壊れる

という事態になります。

そこで Chrome は、移行猶予としての例外を設けました。


2 分ルールの正体(時間軸で理解)

T0   サーバーが Set-Cookie(SameSite 未指定)
     ↓
T0 ~ T+2 分   【例外期間】
     ├─ クロスサイト GET  ✅
     ├─ クロスサイト POST ✅  ← 本来は禁止
     └─ 挙動 ≒ SameSite=None
     ↓
T+2 分以降
     ├─ クロスサイト GET  ✅
     ├─ クロスサイト POST ❌
     └─ 挙動 = SameSite=Lax
  • 変わるのは最初の 2 分だけ
  • それ以外は通常の Lax

「更新」も 2 分対象になる理由

重要なのは、Chrome が見ているのは:

Cookie が“いつ作られたか”ではなく
“いつ変更されたか”

という点です。

2 分ウィンドウを再発動させる操作

  • ログイン(Set-Cookie)
  • ログアウト(Set-Cookie)
  • セッション更新
  • 状態フラグ更新(例:isBanned, role

攻撃者はこの「更新」を狙います


攻撃者視点:なぜ危険なのか?

2 分ルールがあることで、以下が成立します。

  1. ユーザーに GET リクエストを踏ませる
  2. Cookie が更新される
  3. 2 分以内にクロスサイト POST
  4. Chrome が Cookie を送信
  5. サーバーは正規操作と誤認

これは:

  • XSS 不要
  • Cookie 値の取得不要
  • ブラウザ挙動は完全に正規

設計ミスがそのまま攻撃面になるパターンです。


よくある誤解

「これは Chrome の脆弱性では?」

いいえ。仕様です。

「Lax が破られている?」

Lax は守られている。例外条件があるだけ。

「対策はブラウザ任せでいい?」

最も危険な考え方。


防御側の正しい理解

SameSite を必ず明示する

Set-Cookie: session=abc; SameSite=Strict; Secure; HttpOnly

未指定が最大のリスク


Cookie を認可・状態判断に使わない

isAdmin=true
isBanned=false


状態変更は必ず

  • POST
  • CSRF トークン
  • サーバー側検証

ペンテスター向けチェックポイント

  • SameSite 未指定 Cookie がある
  • login / logout で Cookie が更新される
  • POST API が Cookie 存在を前提にしている
  • Cookie が状態や権限を持つ

2 分 CSRF チェーン成立の可能性あり


まとめ

Chrome の SameSite 2 分ルールは、

「古い Web を壊さないための安全装置」

ですが、同時に、

「理解していない実装を攻撃に変える装置」

でもあります。

最後に一文で締めます。

SameSite を書いていない Cookie は、
防御ではなく “期待” にすぎない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?