web-dev-qa-db-ja.com

XML外部エンティティ-ローカルファイルの列挙(影響評価の質問)

Webアプリケーションのテスト中にXML要求と応答のペアを見つけ、XXEペイロードを挿入しようとしました。この場合、リクエストで送信されたXMLパラメータはレスポンスに反映されていません。ただし、リクエストとレスポンスがXMLであったため、XXEペイロードを試すことにしました。

サーバーからのローカルファイルを応答に含めることはできませんでしたが、有効なファイル名と無効なファイル名を含むリクエストに対して異なるHTTP応答を受け取りました。例えば.

<!ENTITY file SYSTEM "file:///etc/hosts" (valid file) 
<!ENTITY file SYSTEM "file:///etc/hosts1" (invalid file)

上記の各ケースで、異なるHTTP応答が受信されました。有効なファイル名からエラーなしでXML応答が返され、無効なファイル名から「ファイルが見つかりません」という明確なXML解析エラーが返されました。

アクティビティのレポートを終了し、この問題を「XML解析エラーによるファイル名の列挙」として報告しました。ただし、この脆弱性を悪用してバックエンドサーバーに関する詳細情報を取得するさまざまな方法に興味があり、この脆弱性の技術的な影響を評価するための情報を受け取りたいと考えていました。

2
Shurmajee

完全な答えではありませんが、XXEが情報開示のバグであるだけでなく、DoSのバグである可能性があることは注目に値します。 /dev/zero\\.\pipe\atsvc、または終了しないか、またはほぼ永久にブロックされるだけの、その他の種類の特別なパイプ/ソケット/ファイルから読み取ってみてください。もちろん、XXEが機能する場合は、通常、再帰的なエンティティ展開(別名 Billion Laughs )も実行できます。これも非常に簡単なDoSです。

XXEは、サーバーのファイアウォールの背後にあるネットワークスキャンをピボットするためにも使用できます。 file: URIスキームを指定する必要はありません。 http:https:ftp:なども機能します。非標準ポートを指定することもできます。これは、特定の管理インターフェイスなどを探すときに役立ちます。もちろん、これらのURLのコンテンツにアクセスできる場合はさらに便利ですが、サービスがあることを知っているだけで役立つ場合がよくあります。

ファイルの内容を取得できなかったのは非常に奇妙です。通常は、エラーメッセージを介して、またはファイルの内容をユーザー指定の入力として指定し、別の関数を使用してそれらを読み取ることで、何らかの方法でそれが可能です(たとえば、「はい、私の自宅のアドレスisTLS秘密鍵の内容! ").

1
CBHacking