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