Shikata Ga Nai

Private? There is no such things.

第25回 XML外部エンティティ(XXE):実際の確認方法

Hello there, ('ω')ノ

XMLとは?

  • データのやりとりに使われる形式
  • JSONと並んで業務システムでよく使われます

例:

<?xml version="1.0"?>
<user>
  <name>山田</name>
</user>

このような形のデータです。


XXEが発生するパターンとは?

  • XMLファイルを受け取って解析するシステム
  • ファイルアップロード機能
  • API連携など

特に次のような場合に注意:

  • アップロード:請求書XMLや申請書XML
  • API:XML形式でデータをPOST

なぜ危険なのか?

攻撃者は次のような細工をします:

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY secret SYSTEM "file:///etc/passwd">
]>
<user>
  <name>&secret;</name>
</user>

この場合、サーバー内の機密ファイル(/etc/passwd)などの内容が外部へ漏れるリスクがあります。


実際のチェック手順① 対象システムを探す

  • XMLアップロード機能があるか?
  • XMLデータをAPIで受け取っているか?

社内システムでそのような場所があれば要チェックです。


実際のチェック手順② テスト用XMLを用意

上記サンプルのようなXMLを作成し:

  • ファイルアップロード欄からアップロード
  • APIで送信

実際のチェック手順③ 結果を確認

  • アップロード後の画面やレスポンスデータに、 &secret; の中身が展開されていないか?
  • 文字化けやエラーが出るか?

✅ 中身がそのまま表示された場合 → XXE脆弱性の疑いあり ✅ エラーになる場合 → 対策済みの可能性あり


チェックリストまとめ

  • [ ] XMLアップロードやAPIを確認したか?
  • [ ] テスト用XXEペイロードを試したか?
  • [ ] 結果画面やレスポンスに内部情報が含まれていないか?
  • [ ] テスト実施前に必ず事前許可を取ったか?

社内向け補足

特に業務システムでよくある:

  • 請求書アップロード機能
  • 電子帳票システム
  • 外部サービスとの連携API

などは優先して確認しましょう。


注意事項

  • 本番環境での試験は必ず事前許可を取ること
  • 内部ファイルパスなどを試す場合は慎重に
  • 外部通信が含まれる場合は影響範囲確認必須

まとめ

  • XML外部エンティティ(XXE)は「悪意あるXML」を使った攻撃
  • アップロードやAPI連携時に発生することが多い
  • テストXMLを用意 → 送信 → 結果確認の流れが基本

Best regards, (^^ゞ