Cloud Metadata Potentially Exposed

「Cloud Metadata Potentially Exposed」脆弱性に関する解説記事の例を以下に示します。

概要

  • 脆弱性の名前:Cloud Metadata Potentially Exposed
  • 問題の要点:クラウドインスタンスのメタデータサービスが不正アクセス可能な状態になっている
  • よくある発生シーン:AWS EC2、Google Compute Engine、Azure VMなど、パブリッククラウド環境で発生

背景

クラウドプロバイダーは、各インスタンスの設定情報や認証情報(IAMロールの一時資格情報など)を取得するため、専用のメタデータサービスを実装しています。
近年、SSRF(Server Side Request Forgery)攻撃や設定ミスが原因で、外部から意図しないアクセスが発生する事例が増加しました。
例えば、2019年のCapital One事件では、メタデータサービスへの不適切なアクセスにより大規模な情報漏洩が発生し、注目されました。

セキュリティ上のリスク

  • SSRFを利用したインスタンスメタデータへの不正アクセス
  • IAMロールや一時的な認証情報の漏洩によりクラウドリソースの不正利用
  • 実際のインシデント例:Capital One事件では、多数の個人情報が流出し、約1億ドルの損害が発生

対処方法の具体例

Apache2

誤った設定例

メタデータエンドポイントの保護を行っていない状態です。

正しい設定例

Apache2で対象ディレクトリへのアクセスを拒否する設定例です。

# ファイル: /etc/apache2/sites-available/your-site.conf
<LocationMatch "^/(latest/meta-data/|computeMetadata/|metadata/)">
    Require all denied
</LocationMatch>

Nginx

誤った設定例

メタデータエンドポイントへのアクセス制限が無い状態です。

正しい設定例

Nginxでメタデータエンドポイントに対してアクセス拒否を実施する方法です。

# ファイル: /etc/nginx/conf.d/your-site.conf
location ~* /latest/meta-data/ {
    deny all;
    return 403;
}

PHP

誤った設定例

外部入力をバリデーションせず、直接リクエストを実行する例です。

// 誤った例: バリデーションなし
$response = file_get_contents($url);

正しい設定例

PHPでリクエスト時、特定のメタデータIPやホストが含まれていないかチェックを行う例です。

// ファイル: app/Http/Controllers/ExampleController.php
function validateRequest($url) {
    $blocked = [
        '169.254.169.254',
        'metadata.google.internal',
        'metadata.azure.internal'
    ];

    foreach ($blocked as $domain) {
        if (strpos($url, $domain) !== false) {
            throw new \Exception('メタデータへのアクセスは禁止されています');
        }
    }
    return true;
}

AWS(ネットワークレベル)

誤った設定例

デフォルト状態でメタデータサービスが利用可能な設定となっています。

正しい設定例

AWS CLIを利用して、インスタンスメタデータサービスのエンドポイントを無効にする例です。

# AWS CLI コマンド例
aws ec2 modify-instance-metadata-options --instance-id i-1234567890abcdef0 --http-endpoint disabled

検出方法

OWASP ZAPでの出力例

  • Alert 名:Cloud Metadata Potentially Exposed
  • リスク:High
  • URL:対象アプリケーション内のAPIやサービス経由でメタデータエンドポイントが検知

curlでの手動再現例

以下のコマンドで、メタデータサービスへのアクセスを手動で確認できます。

# AWS EC2の場合
curl http://169.254.169.254/latest/meta-data/

# Google Compute Engineの場合
curl -H "Metadata-Flavor: Google" http://metadata.google.internal/

まとめ

  • CVSS 基本値:8.0(重大)
  • 運用チームや開発者が意識すべきポイント
    • IMDSv2の利用やHTTPエンドポイントの無効化
    • ネットワークレベルでのアクセス制御(セキュリティグループ、ファイアウォール、NSG)
    • Webサーバー・アプリケーションの設定見直し
    • 定期的なコードレビューおよびセキュリティ監査の実施
  • 再発防止
    • IaCポリシーによる設定の自動チェック
    • WAF設定の強化
    • 継続的なセキュリティスキャンの運用

補足資料・参考URL

以上の対策と検出方法を活用して、クラウドメタデータの不正アクセスリスクを低減してください。