Hello there, ('ω')ノ
🧠 XXEの基本概念
XML External Entity Injection(XXE)とは、アプリケーションがユーザー入力を含むXMLデータをパース(解析)する際に、そのXML構造に埋め込まれた外部エンティティ(External Entity)を不適切に処理してしまう脆弱性です。
⚠️ XXE攻撃で可能になること
攻撃内容 | 説明 |
---|---|
📂 サーバーファイルの閲覧 | /etc/passwd や .env などの機密ファイルを読み取れる |
🌐 SSRF(サーバー側リクエスト偽造) | アプリケーションから内部ネットワークや外部サイトへ不正なリクエストを送信させる |
🧠 構成情報の漏洩 | システム内部のIP、環境変数、アクセス権限などが漏れることも |
💣 サーバー乗っ取り(高度) | 特定条件下でリモートコード実行やDoS攻撃に発展する可能性も |
🔧 攻撃の仕組み
XMLドキュメントに次のような「外部エンティティ定義」を埋め込みます:
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <foo>&xxe;</foo>
<!ENTITY>
はエンティティを定義する宣言SYSTEM "file:///etc/passwd"
でローカルファイルを読み込み&xxe;
を通じてその内容をXML内に展開
📦 実際の攻撃シナリオ(例)
- WebアプリがXMLを受け付けるAPIエンドポイントを提供(例:ファイルアップロード、SOAP、SAML)
- 攻撃者が外部エンティティ付きのXMLを送信
- サーバーがXMLを無防備に解析 → 外部ファイルやURLにアクセス
- 結果がレスポンスやログなどに表示される
🛡️ 対策
対策項目 | 詳細 |
---|---|
XMLパーサー設定の制限 | 外部エンティティやDTDを無効にする(例:JavaならsetFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true) ) |
JSONなど非XML形式の使用 | そもそもXMLを使わない |
サーバー構成の最小権限化 | サービスユーザーにファイルアクセスや外部通信の権限を最小限にする |
WAFの導入 | 攻撃的なXML構造の検知・遮断 |
🧩 XXEは「データ形式の柔軟性」が裏目に出た典型例。 一見無害なXMLが、サーバーの目と手を通じて内側を暴き出す強力な攻撃手段となるのです。
Best regards, (^^ゞ