Obsolete Content Security Policy (CSP) Header Found

概要

  • 脆弱性の名前: Obsolete Content Security Policy (CSP) Header Found (廃止されたContent Security Policy (CSP) ヘッダーの検出)
  • どんな問題か: Webサーバーが、現在では推奨されない古いバージョンのCSPヘッダーを使用している状態。
  • よくある発生シーン: 古いWebサーバーやフレームワークを使用している場合、CSPの設定が更新されていない場合、クラウド環境での設定ミス。

背景

  • 問題視されるようになった背景: CSPはWebアプリケーションのセキュリティを向上させるための重要な仕組みですが、仕様が進化しており、古いCSPヘッダーでは最新の攻撃に対応できない可能性があるため。
  • クラウド設計や設定ミスによる実例: クラウド環境でWebサーバーを構築する際に、デフォルト設定のまま古いCSPヘッダーを使用している場合、新しいCSPディレクティブが適用されず、セキュリティリスクが高まることがある。

セキュリティ上のリスク

  • どんな攻撃に悪用されるか:
    • クロスサイトスクリプティング (XSS) 攻撃: 古いCSPヘッダーでは、unsafe-inlineunsafe-evalなどの危険なディレクティブがデフォルトで許可されている場合があり、XSS攻撃のリスクが高まる。
    • クリックジャッキング攻撃: 古いCSPヘッダーでは、frame-ancestorsディレクティブがサポートされていない場合があり、クリックジャッキング攻撃を受ける可能性がある。
    • データインジェクション攻撃: 古いCSPヘッダーでは、データの送信元を制限するディレクティブが不足している場合があり、データインジェクション攻撃を受ける可能性がある。
  • 実被害が出た具体的なインシデント: 具体的なインシデントは特定できませんでしたが、過去には、古いCSPヘッダーを使用していたWebサイトがXSS攻撃を受け、ユーザーの個人情報が漏洩した事例が報告されています。

対処方法の具体例

Apache2での対処

# .htaccess
Header set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self';"

Nginxでの対処

# nginx.conf
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self';" always;

PHPでの対処

<?php
// Content-Security-Policyヘッダーを設定する
header("Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self';");

ベストプラクティス

  • 最新のCSPディレクティブを使用する: default-srcscript-srcstyle-srcなどの基本的なディレクティブに加え、frame-ancestorsupgrade-insecure-requestsblock-all-mixed-contentなどの最新のディレクティブを使用する。
  • unsafe-inlineunsafe-evalを使用しない: これらのディレクティブはXSS攻撃のリスクを高めるため、可能な限り使用を避ける。
  • CSPを段階的に適用する: CSPを適用する際は、Report-Onlyモードで動作を確認し、問題がないことを確認してから適用する。
  • CSPの評価ツールを使用する: CSPの評価ツールを使用し、設定が適切かどうかを確認する。

間違った設定例

# 古いCSPヘッダー
Header set X-Content-Security-Policy "default-src 'self'"

正しい設定例

# 最新のCSPヘッダー
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://example.com; img-src 'self' data:; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content;"

検出方法

  • OWASP ZAPでの検出時の出力例: OWASP ZAPでは、レスポンスヘッダーに古いCSPヘッダー (X-Content-Security-PolicyX-WebKit-CSP) が含まれている場合に、警告を表示する。
  • 手動での確認: ブラウザの開発者ツールを使用し、レスポンスヘッダーを確認し、古いCSPヘッダーが使用されていないかを確認する。また、curlコマンドを使用して、レスポンスヘッダーを確認することもできる。

まとめ

  • 重要度: Medium (Webアプリケーションの機能やデータの種類によって変動します)
  • 運用チームや開発者が意識すべきポイント:
    • 最新のCSPディレクティブを使用する
    • unsafe-inlineunsafe-evalを使用しない
    • CSPを段階的に適用する
    • CSPの評価ツールを使用する
  • 再発防止の観点:
    • 開発者向けのセキュリティトレーニングを実施する
    • WebサーバーやフレームワークのCSPに関する設定を定期的に見直す
    • CI/CDパイプラインにCSPの評価ツールを組み込む

補足資料リンクや参考URL

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