Cross-Domain Misconfiguration

概要

  • 脆弱性の名前: Cross-Domain Misconfiguration (クロスドメイン設定の不備)
  • 問題の要点: Webアプリケーションのクロスオリジンリソース共有(CORS)設定が不適切であるため、異なるオリジンからの不正なアクセスを許可してしまう状態。
  • よくある発生シーン: CORS設定の誤り、ワイルドカードの使用、開発環境から本番環境への移行時の設定ミスなど

背景

CORSは、Webページが異なるオリジン(ドメイン、プロトコル、ポート)のリソースにアクセスする際に、ブラウザがセキュリティ上の制限をかける仕組みです。
CORSの設定が不適切であると、攻撃者が悪意のあるWebサイトから、ユーザーのWebアプリケーションに対して不正なリクエストを送信し、機密情報を盗み取ったり、ユーザーの代わりに操作を実行したりする可能性があります。
クラウド環境では、複数のサービスが連携して動作することが多いため、CORSの設定ミスが問題視されています。

セキュリティ上のリスク

  • クロスサイトスクリプティング(XSS)攻撃の悪用。
  • 機密情報(APIキー、認証情報など)の漏洩。
  • ユーザーアカウントの乗っ取り。
  • Webサイトの改ざんや不正なコンテンツの表示。

対処方法の具体例

Apache2

誤った設定例

CORSを許可する設定で、ワイルドカードを使用している例:

# 誤った例: ワイルドカードを使用
Header set Access-Control-Allow-Origin "*"

正しい設定例

CORSを許可するオリジンを明示的に指定する例:

# 正しい例: オリジンを明示的に指定
Header set Access-Control-Allow-Origin "https://example.com"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"

Nginx

誤った設定例

CORSを許可する設定で、ワイルドカードを使用している例:

# 誤った例: ワイルドカードを使用
add_header Access-Control-Allow-Origin "*";

正しい設定例

CORSを許可するオリジンを明示的に指定する例:

# 正しい例: オリジンを明示的に指定
add_header Access-Control-Allow-Origin "https://example.com";
add_header Access-Control-Allow-Credentials "true";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type, Authorization";

PHP

誤った設定例

CORSを許可する設定で、ワイルドカードを使用している例:

<?php
// 誤った例: ワイルドカードを使用
header("Access-Control-Allow-Origin: *");
?>

正しい設定例

CORSを許可するオリジンを明示的に指定する例:

<?php
// 正しい例: オリジンを明示的に指定
header("Access-Control-Allow-Origin: https://example.com");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
?>

JavaScript

JavaScript自体でCORSの設定を行うことはできません。CORSの設定はWebサーバーで行う必要があります。

AWS

正しい設定例

API GatewayでCORSを設定する例:

  • API GatewayのCORS設定で、許可するオリジン、メソッド、ヘッダーを明示的に指定します。
  • ワイルドカードの使用は避け、必要なオリジンのみを許可するように設定します。

検出方法

OWASP ZAPでの出力例

  • Alert 名: Cross-Domain Misconfiguration
  • リスク: Middle
  • URL: CORS設定が不適切なURL
  • パラメータ: なし
  • 詳細: CORS設定が不適切であるという情報

手動再現例

  1. Webブラウザの開発者ツールを開き、Consoleタブを選択します。
  2. 異なるオリジンから、Webアプリケーションに対してXMLHttpRequestまたはfetch APIを使用してリクエストを送信します。
  3. CORSエラーが発生しない場合、CORS設定が不適切である可能性があります。
// 異なるオリジンからのリクエスト例
fetch('https://example.com/api/data', {
  method: 'GET',
  mode: 'cors'
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

まとめ

  • CVSS 基本値: 5.8 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • CORS設定を適切に行い、必要なオリジンのみを許可する。
    • ワイルドカードの使用は避け、具体的なオリジンを指定する。
    • CORS設定を定期的に見直し、不要なオリジンを削除する。
    • 開発環境と本番環境で異なるCORS設定を使用する。
    • API GatewayなどのサービスでCORSを設定する場合は、設定ミスがないか確認する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する(Security by Design)。
    • コードレビューを実施し、CORS設定の誤りを早期に発見する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • 開発者向けのセキュリティトレーニングを実施する。

補足資料・参考URL

以上の対策と検出方法を活用して、Cross-Domain Misconfigurationのリスクを低減してください。