ホームページ >運用・保守 >安全性 >XML 外部エンティティ インジェクションの脆弱性の分析例

XML 外部エンティティ インジェクションの脆弱性の分析例

王林
王林転載
2023-05-11 16:55:122249ブラウズ

1. XML 外部エンティティ インジェクション

XML 外部エンティティ インジェクションの脆弱性は、一般に XXE 脆弱性と呼ばれるものです。 XML は広く使用されているデータ転送形式であり、多くのアプリケーションには XML データを処理するためのコードが含まれています。デフォルトでは、多くの古い XML プロセッサや不適切に構成された XML プロセッサは外部エンティティを参照します。

攻撃者が脆弱なコード、依存関係、または統合を通じて XML ドキュメントをアップロードしたり、XML ドキュメントに悪意のあるコンテンツを追加したりできる場合、欠陥のある XML プロセッサを攻撃する可能性があります。 XXE 脆弱性の発生は開発言語とは関係ありませんが、アプリケーション内で XML データが解析され、データがユーザーによって制御されている限り、アプリケーションは XXE 攻撃に対して脆弱になる可能性があります。この記事では、Java プログラムを例に、XXE 脆弱性の原因と修復方法を紹介します。 XXE 脆弱性の詳細については、「CWE-611: XML 外部エンティティ参照 ('XXE') の不適切な制限」(http://cwe.mitre.org/data/settings/611.html) を参照してください。

2. XML 外部エンティティ インジェクション

XXE 脆弱性は、データの抽出、リモート サーバー リクエストの実行、内部システムのスキャン、サービス拒否攻撃やその他の攻撃に使用される可能性があります。 。ビジネスへの影響は主に、影響を受ける参照元とデータ保護のニーズによって異なります。

2018 年以降、CVE ではこれに関連する脆弱性情報が合計 92 件公開されました。 CVE の一部は次のとおりです:

##CVE-2018-8027Apache Camel 2.20.0 2.20.3 および 2.21.0 コアには、XSD 検証プロセッサに XXE 脆弱性があります。 CVE-2018-13439WeChat Payment Java SDK の WXPayUtil クラスに XXE 脆弱性があります。 CVE-2018-1000548バージョン番号 14.3 より前の Umlet には、ファイル解析における XML 外部エンティティ挿入の脆弱性があり、これにより機密データが漏洩する可能性があります。漏洩と拒否サービス、サーバー側のリクエスト偽造。この攻撃は、特別に細工された UXF ファイルを介して実行される可能性があります。 CVE-2018-1364IBM Content Bavigator バージョン 2.0 および 3.0 は、XML データを処理する際の XML 外部エンティティ (XXE) 攻撃に対して脆弱です。リモートの攻撃者がこの脆弱性を悪用して、機密情報を漏洩したり、メモリ リソースを占有したりする可能性があります。

3. サンプル コード

3.1 欠陥コード

このセクションでは、サンプル コード ソースを使用して、オープン ソース Java SDK ( https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1)、ソースファイル名: WXPayUtil.java、ファイルパス: java-sdk-v3\src\main\java\ com\github\wxpay\sdk。

XML 外部エンティティ インジェクションの脆弱性の分析例

上記のコードでは、25 行目でデータが xmlToMap 仮パラメータを介して渡されていることがわかります。データはいかなる方法でもフィルタリングされておらず、XMLプロセッサにはセキュリティ設定がありません。データは 32 行目で解析されます。実際のシナリオでは、パラメータ strXML も攻撃者によって制御されるため、攻撃者は悪意のある strXML を構築する可能性があります。 XXE攻撃を実行します。

360 コード ガードを使用して上記のサンプル コードを検出すると、ファイルの 32 行目にある「危険な XML 外部エンティティ インジェクション」の欠陥を検出できます。図 1 に示すように:

XML 外部エンティティ インジェクションの脆弱性の分析例

図 1 危険な XML 外部エンティティ インジェクションが検出されました

3.2 修復コード

XML 外部エンティティ インジェクションの脆弱性の分析例

XML 外部エンティティ インジェクションの脆弱性の分析例

上記の修復コードの 28 行目では、XML ツール クラス WXPayXmlUtil を使用して安全な XML プロセッサが生成されます。 WXPayXmlUtil クラスで最も重要なのは 16 行目で、setFeature を使用して、生成された XML プロセッサで DTDS を完全に無効にします。図 2 からわかるように、360 Code Guard は修復されたコード内の欠陥を検出しませんでした。

XML 外部エンティティ インジェクションの脆弱性の分析例


図 2 XXE 脆弱性修復の例

4. XXE 脆弱性を回避する方法

一般的な回避方法:

1. 機密データのシリアル化を避けるために、できる限り単純なデータ形式 (JSON など) を使用します;

2. 適時にアプリケーションを修復または更新するか、基盤となるオペレーティング システムで使用されるすべての XML プロセッサとライブラリ。同時に、依存関係の検出を通じて SOAP をバージョン 1.2 以降に更新します。

3. アプリケーションのすべての XML パーサーで XML 外部エンティティと DTD プロセスを無効にします。具体的な実装については、「OWASP チートシート」を参照してください。 「XXE 防止」》(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet)

次のコードは、DocumentBuilderFactory を使用して XML を解析するときに XXE 脆弱性を防止する例です。 java アプリケーション :

XML 外部エンティティ インジェクションの脆弱性の分析例

4. 入力検証: サーバー側でホワイトリストを使用して入力検証とフィルタリングを行い、XML ドキュメント、ヘッダー、またはノードに悪意のあるデータが表示されるのを防ぎます。

5. XML および XXE の脆弱性を検証し、ASAT ツールを使用すると、依存関係とセキュリティ構成を検出することで XXE の脆弱性を発見できます。


以上がXML 外部エンティティ インジェクションの脆弱性の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。