Cookie with SameSite Attribute None

概要

  • 脆弱性の名前: Cookie with SameSite Attribute None (SameSite属性がNoneのCookie)
  • 問題の要点: SameSite属性がNoneに設定されたCookieは、HTTPSを使用していない場合にクロスサイトリクエストで送信されるため、セキュリティリスクが高まる状態。
  • よくある発生シーン: クロスサイトでのCookie共有が必要な場合、特に古いブラウザをサポートする必要がある場合に発生しやすい。クラウド環境では、複数のドメインにまたがるアプリケーションで設定ミスが起こりやすい。

背景

SameSite属性は、Cookieがクロスサイトリクエストで送信されるかどうかを制御するセキュリティ機能です。NoneLaxStrictの3つの値があり、Noneは最も緩い設定です。
SameSite=Noneを使用する場合、Secure属性も設定する必要があり、CookieはHTTPSでのみ送信されるべきです。
この脆弱性が問題視されるようになった背景には、クロスサイトリクエストフォージェリ(CSRF)攻撃の増加と、プライバシー保護の重要性の高まりがあります。

セキュリティ上のリスク

  • クロスサイトリクエストフォージェリ(CSRF)攻撃。
  • 中間者攻撃(Man-in-the-Middle attack)によるCookieの窃取。
  • セッションハイジャック。
  • プライバシー情報の漏洩。

対処方法の具体例

PHP

誤った設定例

Secure属性なしでSameSite=Noneを設定している例:

<?php
// 誤った例: Secure属性なしでSameSite=Noneを設定
setcookie('session_id', '1234567890', time() + 3600, '/', 'example.com', false, true, 'None');
?>

正しい設定例

Secure属性とSameSite=Noneを設定したCookieの設定例:

<?php
// 正しい例: Secure属性とSameSite=Noneを設定
setcookie('session_id', '1234567890', [
    'expires' => time() + 3600,
    'path' => '/',
    'domain' => 'example.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'None'
]);
?>

JavaScript

JavaScriptでCookieを設定する場合も、Secure属性とSameSite=Noneを適切に設定する必要があります。

AWS

正しい設定例

ロードバランサー(ALB/ELB)でCookieを設定する場合、Secure属性とSameSite=Noneを設定することができます。また、CloudFrontを使用している場合は、HTTPSでのみアクセスを許可するように設定します。

検出方法

OWASP ZAPでの出力例

  • Alert 名: Cookie with SameSite Attribute None
  • リスク: Low
  • URL: Cookieが設定されているURL
  • パラメータ: Cookieの名前
  • 詳細: SameSite属性がNoneに設定されているCookieが存在するという情報

手動再現例

  1. Webブラウザの開発者ツールを開き、Applicationタブを選択します。
  2. Cookiesの項目を選択し、Cookieの一覧を表示します。
  3. SameSiteの項目がNoneになっているCookieが存在する場合、脆弱性が存在する可能性があります。
curl -I https://example.com

上記コマンドを実行し、HTTPレスポンスヘッダーのSet-CookieSameSite=Noneが存在する場合、脆弱性が存在する可能性があります。

まとめ

  • CVSS 基本値: 4.7 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • SameSite=Noneを使用する場合は、必ずSecure属性も設定する。
    • Webサイト全体でHTTPSを適用する。
    • Cookieの設定を定期的に見直し、SameSite属性とSecure属性の設定漏れがないか確認する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する(Security by Design)。
    • コードレビューを実施し、SameSite属性とSecure属性の設定漏れを早期に発見する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • Cookieの設定に関するポリシーを策定し、遵守する。

補足資料・参考URL

以上の対策と検出方法を活用して、Cookie with SameSite Attribute Noneのリスクを低減してください。