CSP: Wildcard Directive
概要
- 脆弱性の名前: CSP: Wildcard Directive (CSP: ワイルドカードディレクティブ)
- 問題の要点: Content Security Policy (CSP) の設定において、
default-src
やscript-src
などのディレクティブでワイルドカード*
を使用しているため、意図しないオリジンからのリソース読み込みを許可してしまう状態。 - よくある発生シーン: CSP設定の簡略化、開発初期段階での設定、本番環境への移行時の設定ミスなど
背景
CSPは、Webページが読み込むことができるリソースのオリジンを制限することで、クロスサイトスクリプティング(XSS)攻撃のリスクを軽減するセキュリティ機能です。
ワイルドカード*
をCSPディレクティブで使用すると、すべてのオリジンからのリソース読み込みを許可してしまい、CSPによる保護効果が大幅に低下します。
クラウド環境では、複数のサービスが連携して動作することが多いため、CSPの設定ミスが問題視されています。
セキュリティ上のリスク
- クロスサイトスクリプティング(XSS)攻撃の悪用。
- 悪意のあるスクリプトの実行による、ユーザー情報の詐取、Webサイトの改ざん、不正なコンテンツの表示。
- クリックジャッキング攻撃による、ユーザーの意図しない操作の実行。
対処方法の具体例
Apache2
誤った設定例
CSPヘッダーでワイルドカードを使用している例:
# 誤った例: ワイルドカードを使用
Header set Content-Security-Policy "default-src *;"
正しい設定例
CSPヘッダーで許可するオリジンを明示的に指定する例:
# 正しい例: オリジンを明示的に指定
Header set Content-Security-Policy "default-src 'self' https://example.com;"
Nginx
誤った設定例
CSPヘッダーでワイルドカードを使用している例:
# 誤った例: ワイルドカードを使用
add_header Content-Security-Policy "default-src *;";
正しい設定例
CSPヘッダーで許可するオリジンを明示的に指定する例:
# 正しい例: オリジンを明示的に指定
add_header Content-Security-Policy "default-src 'self' https://example.com;";
PHP
誤った設定例
CSPヘッダーでワイルドカードを使用している例:
<?php
// 誤った例: ワイルドカードを使用
header("Content-Security-Policy: default-src *;");
?>
正しい設定例
CSPヘッダーで許可するオリジンを明示的に指定する例:
<?php
// 正しい例: オリジンを明示的に指定
header("Content-Security-Policy: default-src 'self' https://example.com;");
?>
JavaScript
JavaScript自体でCSPの設定を行うことはできません。CSPの設定はWebサーバーで行う必要があります。
AWS
正しい設定例
CloudFrontを使用してCSPヘッダーを設定する例:
- CloudFrontのBehaviorで、カスタムヘッダーを追加し、
Content-Security-Policy
ヘッダーを設定します。 - CSPディレクティブでワイルドカードを使用せず、許可するオリジンを明示的に指定します。
検出方法
OWASP ZAPでの出力例
- Alert 名: CSP: Wildcard Directive
- リスク: Middle
- URL: CSPヘッダーが設定されているURL
- パラメータ: なし
- 詳細: CSPディレクティブでワイルドカードが使用されているという情報
手動再現例
- Webブラウザの開発者ツールを開き、Networkタブを選択します。
- Webサイトにアクセスし、HTTPレスポンスヘッダーを確認します。
Content-Security-Policy
ヘッダーが存在し、default-src
やscript-src
などのディレクティブでワイルドカード*
が使用されている場合、脆弱性が存在します。
curl -I https://example.com
上記コマンドを実行し、Content-Security-Policy
ヘッダーにワイルドカードが含まれている場合、脆弱性が存在する可能性があります。
まとめ
- CVSS 基本値: 4.0 (Medium)
- 運用チームや開発者が意識すべきポイント:
- CSPディレクティブでワイルドカードを使用しない。
- 許可するオリジンを明示的に指定する。
- CSPレポートURIを設定し、CSP違反を監視する。
- 定期的にペネトレーションテストを実施し、脆弱性を特定する。
- 再発防止:
- 開発プロセス全体でセキュリティを考慮する(Security by Design)。
- コードレビューを実施し、CSPヘッダーの設定誤りを早期に発見する。
- 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
- 開発者向けのセキュリティトレーニングを実施する。
補足資料・参考URL
以上の対策と検出方法を活用して、CSP: Wildcard Directiveのリスクを低減してください。