Cookie without SameSite Attribute

概要

  • 脆弱性の名前: Cookie without SameSite Attribute (SameSite 属性のない Cookie)
  • 問題の要点: Cookie に SameSite 属性が設定されていないため、クロスサイトリクエストフォージェリ (CSRF) 攻撃に対して脆弱になる可能性がある状態。
  • よくある発生シーン: Web アプリケーションの開発時に、Cookie の設定が適切に行われていない場合。特に、古いフレームワークを使用している場合や、開発者が SameSite 属性の存在を知らない場合に発生しやすい。クラウド環境では、複数のドメインにまたがるアプリケーションで設定ミスが起こりやすい。

背景

SameSite 属性は、Cookie がクロスサイトリクエストで送信されるかどうかを制御するセキュリティ機能です。SameSite 属性には、StrictLaxNone の 3 つの値があります。
SameSite 属性を設定することで、CSRF 攻撃のリスクを低減できます。
近年、Web アプリケーションのセキュリティ対策として、SameSite 属性の設定が重要視されています。

セキュリティ上のリスク

  • クロスサイトリクエストフォージェリ (CSRF) 攻撃。
  • セッションハイジャック。
  • 認証情報の漏洩。
  • ユーザーの意図しない操作の実行。

対処方法の具体例

PHP

誤った設定例

SameSite 属性が設定されていない Cookie の設定例:

<?php
// 誤った例: SameSite 属性が設定されていない
setcookie('session_id', '1234567890', time() + 3600, '/', 'example.com', true, true);
?>

正しい設定例

SameSite 属性を設定した Cookie の設定例:

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

または

<?php
session_set_cookie_params([
    'samesite' => 'Lax'
]);
session_start();
?>

JavaScript

JavaScript で Cookie を設定する場合、SameSite 属性を設定することはできません。SameSite 属性は、サーバーサイドで Cookie を設定する際にのみ有効です。

AWS

正しい設定例

ロードバランサー (ALB/ELB) で Cookie を設定する場合、SameSite 属性を設定することができます。

検出方法

OWASP ZAP での出力例

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

手動再現例

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

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

まとめ

  • CVSS 基本値: 4.7 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • Cookie を設定する際には、必ず SameSite 属性を設定する。
    • SameSite 属性の値は、アプリケーションの要件に応じて適切に選択する (Strict, Lax, None)。
    • セッション Cookie には、特に SameSite 属性を設定する。
    • Cookie の設定を定期的に見直し、SameSite 属性の設定漏れがないか確認する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する (Security by Design)。
    • コードレビューを実施し、SameSite 属性の設定漏れを早期に発見する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • Cookie の設定に関するポリシーを策定し、遵守する。

補足資料・参考 URL

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