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-8027 | Apache Camel 2.20.0 2.20.3 および 2.21.0 コアには、XSD 検証プロセッサに XXE 脆弱性があります。 |
CVE-2018-13439 | WeChat Payment Java SDK の WXPayUtil クラスに XXE 脆弱性があります。 |
CVE-2018-1000548 | バージョン番号 14.3 より前の Umlet には、ファイル解析における XML 外部エンティティ挿入の脆弱性があり、これにより機密データが漏洩する可能性があります。漏洩と拒否サービス、サーバー側のリクエスト偽造。この攻撃は、特別に細工された UXF ファイルを介して実行される可能性があります。 |
CVE-2018-1364
| IBM 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。
上記のコードでは、25 行目でデータが xmlToMap 仮パラメータを介して渡されていることがわかります。データはいかなる方法でもフィルタリングされておらず、XMLプロセッサにはセキュリティ設定がありません。データは 32 行目で解析されます。実際のシナリオでは、パラメータ strXML
も攻撃者によって制御されるため、攻撃者は悪意のある strXML
を構築する可能性があります。 XXE攻撃を実行します。
360 コード ガードを使用して上記のサンプル コードを検出すると、ファイルの 32 行目にある「危険な XML 外部エンティティ インジェクション」の欠陥を検出できます。図 1 に示すように:
図 1 危険な XML 外部エンティティ インジェクションが検出されました
3.2 修復コード
上記の修復コードの 28 行目では、XML ツール クラス WXPayXmlUtil を使用して安全な XML プロセッサが生成されます。 WXPayXmlUtil クラスで最も重要なのは 16 行目で、setFeature を使用して、生成された XML プロセッサで DTDS を完全に無効にします。図 2 からわかるように、360 Code Guard は修復されたコード内の欠陥を検出しませんでした。
図 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 アプリケーション :
4. 入力検証: サーバー側でホワイトリストを使用して入力検証とフィルタリングを行い、XML ドキュメント、ヘッダー、またはノードに悪意のあるデータが表示されるのを防ぎます。
5. XML および XXE の脆弱性を検証し、ASAT ツールを使用すると、依存関係とセキュリティ構成を検出することで XXE の脆弱性を発見できます。
以上がXML 外部エンティティ インジェクションの脆弱性の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。