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