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
- MDN Web Docs: https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies
この解説記事が、脆弱性理解の一助となれば幸いです。