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