XML External Entity injection with error-based data exfiltration から学ぶ

ソース:

infosecwriteups.com

脆弱性:XXE

 

訳:

XXEとは何ですか?

XML 外部エンティティ (XXE) は、XML 入力を処理するアプリケーションで発生するセキュリティの脆弱性で。
XXE 攻撃では、攻撃者がアプリケーションの XML パーサーを悪用して外部エンティティを組み込むことができ、これにより、ローカル ファイルの読み取り、サーバー リクエストの開始、サーバー上での任意のコードの実行など、さまざまな悪意のあるアクションが引き起こされる可能性があって。
このタイプの脆弱性は対処しないと重大な結果を招く可能性があり、サイバーセキュリティの分野で重大な懸念事項となっていて。

 

XXE

最初のブレークスルーは、サーバーサイド リクエスト フォージェリ (SSRF) の脆弱性を可能にする XXE を発見したときに起こり。
SSRF は、攻撃者がサーバーをだまして、サーバーの内部ネットワーク上の他のリソースまたは外部 Web サイトに対して意図しないリクエストを行うときに発生するセキュリティ脆弱性の一種で。

 

この脆弱性は、スキーマ ファイル内に次の XXE ペイロードを挿入することで発生し。  

 

 

このペイロードを手に入れたので、テンプレートからスキーマ ファイルを作成し、ペイロードを追加し。

スキーマを作成した後、それをシステムにアップロード。

 

Uploading the evil schema file

アプリケーションはデフォルトで、アップロード後にスキーマを自動処理します。
ロード後、無効なスキーマ ファイル (インジェクションのため) によりエラーが発生します。

 

XMLエラー

 

エラーにもかかわらず、挿入された XML エンティティは引き続き処理され、サーバーのバックエンドで HTTP リクエストが実行され
SSRF の達成に成功したのは、これが発見の決定的な瞬間で。  

 

SSRF が成功しました

直接出力できないため、ファイルを読み取ることは不可能であることがすぐにわかり。
受け取ったのは一般的なエラー メッセージだけで。
スキーマ ファイルは 特定のテンプレートに準拠する必要があり 、最初の命令の後に XML 解析エラーが発生するため、複数の命令を含む DTD などのレンダリング技術は実用的ではありませんで。

サーバーログの武器化

しかし私はひるむことなく、ターゲット マシン上のファイルを公開する 方法を見つけようと決心しました
調査を続けた結果、アプリケーションに ログ機能 があり、ログを表示できるという解決策にたどり着きました。

処理されて挿入された XML エンティティから貴重な情報を抽出するという私の探求が形になり。

エンティティを宣言するペイロードを含むテンプレートからスキーマを作成し、外部 XML DTD をロードし。

外部 DTD を使用すると、アプリケーションは XML 構造を定義するために別のファイルを参照できるようになり、潜在的な悪用の手段が提供されます。

 

 

次に、 evil.dtd ファイル自体をリモート ホスト上に準備しました。

 

 

以前と同じように、テンプレートからスキーマ ファイルをアップロードし、ペイロードを追加しました。 

 

外部DTD の参照

スキーマはアップロードされますが、いつものようにエラーのため読み込みプロセスが失敗します。 

 

 

ただし、この方法で も外部 DTD ( evil.dtd ) をロードして 処理します

 

 

DTD ファイル内のペイロードは、存在しないファイルを参照することによってサーバー例外をトリガーします。
このファイル名は、「noneexistent/ パスとドライブC:/ のリストを表す文字列 と組み合わせて作成されます
基本的に、未処理の例外テキストは次のようになります。

 

Error, non-existing file at: file:///nonexistent/(C:/)LISTING.

 

そして、次のテキストがエラー ログに表示されます。

 

C:/のリスト

この手法は、ディレクトリの一覧表示のほかに、ファイルの読み取りにも使用できます。
DTD ファイルの内容を操作することで、攻撃者はシステム内の特定のファイルをターゲットにする可能性があります。

 

 

ファイルの読み取りに成功しました

 

ほなほな。