Cookie Without Secure Flag
概要
- 脆弱性の名前: Cookie Without Secure Flag (Cookie に Secure フラグが設定されていない)
- 問題の要点: HTTPS でのみ送信されるべき Cookie に
Secure
フラグが設定されていないため、HTTP 通信で Cookie が漏洩するリスクがある状態。 - よくある発生シーン: Web アプリケーションの開発時に、Cookie の設定が適切に行われていない場合。特に、開発環境と本番環境で設定が異なる場合や、HTTPS が適用されていないページで Cookie を設定している場合に発生しやすい。クラウド環境では、ロードバランサーの設定ミスにより、HTTP でのアクセスが許可されている場合に問題となります。
背景
Secure
フラグは、Cookie が HTTPS でのみ送信されるようにするための重要な設定です。このフラグが設定されていない場合、HTTP 通信で Cookie が送信される可能性があり、中間者攻撃 (Man-in-the-Middle attack) によって Cookie が盗まれるリスクが高まります。
特に、セッション ID や認証情報などの機密情報を含む Cookie は、必ず Secure
フラグを設定する必要があります。
近年、Web アプリケーションのセキュリティ対策として、Secure
フラグの設定が重要視されています。
セキュリティ上のリスク
- 中間者攻撃による Cookie の窃取。
- セッションハイジャック。
- 認証情報の漏洩。
- ユーザーのプライバシー情報の漏洩。
対処方法の具体例
PHP
誤った設定例
Secure
フラグが設定されていない Cookie の設定例:
<?php
// 誤った例: Secure フラグが設定されていない
setcookie('session_id', '1234567890', time() + 3600, '/', 'example.com', false, true);
?>
正しい設定例
Secure
フラグを設定した Cookie の設定例:
<?php
// 正しい例: Secure フラグを設定
setcookie('session_id', '1234567890', [
'expires' => time() + 3600,
'path' => '/',
'domain' => 'example.com',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
?>
または
<?php
// セッションの設定
ini_set('session.cookie_secure', 1);
?>
JavaScript
JavaScript で Cookie を設定する場合、Secure
フラグを設定することはできません。Secure
フラグは、サーバーサイドで Cookie を設定する際にのみ有効です。
AWS
正しい設定例
ロードバランサー (ALB/ELB) で Cookie を設定する場合、Secure
フラグを設定することができます。また、CloudFront を使用している場合は、HTTPS でのみアクセスを許可するように設定します。
検出方法
OWASP ZAP での出力例
- Alert 名: Cookie Without Secure Flag
- リスク: Low
- URL: Cookie が設定されている URL
- パラメータ: Cookie の名前
- 詳細:
Secure
フラグが設定されていない Cookie が存在するという情報
手動再現例
- Web ブラウザの開発者ツールを開き、Application タブを選択します。
- Cookies の項目を選択し、Cookie の一覧を表示します。
Secure
の項目がfalse
になっている Cookie が存在する場合、脆弱性が存在します。
curl -I https://example.com
上記コマンドを実行し、HTTP レスポンスヘッダーの Set-Cookie
に Secure
フラグが存在しない場合、脆弱性が存在する可能性があります。
まとめ
- CVSS 基本値: 4.0 (Medium)
- 運用チームや開発者が意識すべきポイント:
- Cookie を設定する際には、必ず
Secure
フラグを設定する。 - セッション Cookie や認証情報を含む Cookie には、特に
Secure
フラグを設定する。 - Web サイト全体で HTTPS を適用する。
- Cookie の設定を定期的に見直し、
Secure
フラグの設定漏れがないか確認する。
- Cookie を設定する際には、必ず
- 再発防止:
- 開発プロセス全体でセキュリティを考慮する (Security by Design)。
- コードレビューを実施し、
Secure
フラグの設定漏れを早期に発見する。 - 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
- Cookie の設定に関するポリシーを策定し、遵守する。
補足資料・参考 URL
以上の対策と検出方法を活用して、Cookie Without Secure Flag のリスクを低減してください。