Loosely Scoped Cookie

概要

  • 脆弱性の名前: Loosely Scoped Cookie (緩いスコープのCookie)
  • どんな問題か: Cookieのスコープが広すぎるために、意図しないドメインやパスにCookieが送信されてしまう状態。
  • よくある発生シーン: 複数のサブドメインを持つWebサイト、異なるアプリケーションが同一ドメインで動作している環境、Cookieの設定ミス。

背景

  • 問題視されるようになった背景: Webアプリケーションの複雑化に伴い、Cookieの管理が煩雑になり、スコープ設定のミスが増加したため。また、Cookieのスコープに関する知識不足や、開発者のセキュリティ意識の欠如も原因の一つ。
  • クラウド設計や設定ミスによる実例: クラウド環境で複数のアプリケーションを異なるサブドメインで運用している場合、Cookieのドメイン属性を誤って設定すると、すべてのサブドメインにCookieが送信されてしまうことがある。

セキュリティ上のリスク

  • どんな攻撃に悪用されるか:
    • クロスサイトスクリプティング (XSS) 攻撃: 攻撃者がXSS攻撃に成功した場合、緩いスコープのCookieを利用して、他のサブドメインやアプリケーションのCookieを盗み取ることができる。
    • セッションハイジャック: セッションIDが緩いスコープのCookieに保存されている場合、攻撃者がCookieを盗み取ることで、ユーザーのセッションを乗っ取ることができる。
    • クロスサイトリクエストフォージェリ (CSRF) 攻撃: 攻撃者がCSRF攻撃を行う際に、緩いスコープのCookieを利用して、ユーザーに意図しない操作を実行させることができる。
  • 実被害が出た具体的なインシデント: 具体的なインシデントは特定できませんでしたが、過去には、大手SNSサイトでCookieのスコープ設定ミスにより、ユーザーの個人情報が漏洩した事例が報告されています。

対処方法の具体例

Apache2での対処

# .htaccess
Header edit Set-Cookie ^(.*)$ $1;Domain=example.com;Path=/;Secure;HttpOnly;SameSite=Strict

Nginxでの対処

# nginx.conf
proxy_cookie_path / "/; Secure; HttpOnly; SameSite=Strict";
proxy_cookie_domain $host example.com;

WordPressでの対処

<?php
// functions.php
add_action('init', function() {
    // Cookieドメインの設定
    $cookie_domain = '.example.com';
    define('COOKIE_DOMAIN', $cookie_domain);

    // Cookieパスの設定
    define('COOKIEPATH', '/');
    define('SITECOOKIEPATH', '/');
});

PHPでの対処

<?php
// Cookieのスコープを適切に設定する
$domain = 'example.com';
$path = '/';
$secure = true; // HTTPSでのみ送信
$httponly = true; // JavaScriptからのアクセスを禁止
$samesite = 'Strict'; // クロスサイトリクエストでの送信を制限

setcookie('cookie_name', 'cookie_value', [
    'domain' => $domain,
    'path' => $path,
    'secure' => $secure,
    'httponly' => $httponly,
    'samesite' => $samesite,
    'expires' => time() + (60 * 60 * 24 * 30), // 30日間
]);

JavaScriptでの対処

javascript
// JavaScriptでCookieを操作しない
// document.cookie = 'cookie_name=cookie_value; domain=example.com; path=/; secure; httponly; samesite=strict';

ベストプラクティス

  • Cookieのスコープを必要最小限にする: Cookieを送信する必要のあるドメインとパスを正確に設定する。
  • ドメイン属性を明示的に設定する: ドメイン属性を省略すると、ブラウザが自動的にドメインを設定するため、意図しないスコープになる可能性がある。
  • Secure属性を設定する: HTTPSでのみCookieを送信するように設定する。
  • HttpOnly属性を設定する: JavaScriptからのCookieへのアクセスを禁止する。
  • SameSite属性を設定する: クロスサイトリクエストでのCookieの送信を制限する。

検出方法

  • OWASP ZAPでの検出時の出力例: OWASP ZAPでは、Cookieのスコープが広すぎる場合に、警告を表示する。
  • 手動での確認: ブラウザの開発者ツールを使用し、Cookieのドメイン属性とパス属性を確認する。また、異なるサブドメインやパスにアクセスし、Cookieが意図しない場所に送信されていないかを確認する。

まとめ

  • 重要度: Medium (Cookieに保存されている情報の種類やWebサイトの構成によって変動します)
  • 運用チームや開発者が意識すべきポイント:
    • Cookieのスコープを適切に設定する
    • Secure属性、HttpOnly属性、SameSite属性を適切に設定する
    • Cookieの設定に関するドキュメントを作成する
    • Cookieの設定を定期的に監査する
  • 再発防止の観点:
    • 開発者向けのCookieに関するセキュリティトレーニングを実施する
    • WebアプリケーションフレームワークのCookieに関する設定を確認する
    • Cookieの設定を自動化する

補足資料リンクや参考URL

この解説記事が、脆弱性理解の一助となれば幸いです。