Zscaler Proxy バージョン 3.6.1.25 以前における不適切なファイルタイプ制御により、ローカル攻撃者がファイルのダウンロード/アップロード制限をバイパスできる脆弱性。
2022年夏、私は ZScaler プロキシ(バージョン 3.6.1.25 以前)に影響する脆弱性を発見しました。この脆弱性により、ローカル攻撃者は Burp などのツールや、Background Intelligent Transfer Service(BITS)プロトコルを利用する Microsoft 標準の Bitsadmin などのユーティリティを使って、パスワード保護されたアーカイブのダウンロード/アップロード制限を回避できます。
Microsoft のドキュメントによると、BITS プロトコルは 「大きなペイロードをクライアントから HTTP サーバーへ、またはその逆方向に、中断が発生しても転送できるように、ペイロードを複数の断片に分割して送信する方法を定義する」 ものです。これにより、Zscaler が複数のリクエストにわたってファイルを適切に再構築できないため、ファイルタイプに基づく制限をバイパスできます。
この概念実証は ダウンロード の側面のみに焦点を当てますが、この脆弱性はアップロードにも適用されます。
このセクションでは、Zscaler によるパスワード保護されたアーカイブのダウンロード制限をバイパスする 2 つの異なる方法を紹介します。 テストはクライアントのバージョン 3.6.1.25 で、以下の URL を使用して行われました。
最初の方法では、HTTP リクエストを変更します。これはブラウザまたは Burp Suite のようなツールを使用して行えます。このテストでは、前者を選択しました。
以下の画像は、Zscaler によってリクエストが傍受されブロックされている様子を示しています。その後、Range ヘッダーに値 bytes = 0-x(x はファイル全体のサイズより小さい任意の値)を追加してリクエストを再送信します。

リクエストを再送信すると、ステータスコード「206 Partial Content」のレスポンスが返されます。レスポンスヘッダーにはファイル全体のサイズが表示され、レスポンスペイロードは base64 でエンコードされています。


最後のファイルチャンクに到達するまで、バイト範囲の値を手動で増やしながらリクエストを繰り返します。

得られたペイロードはさまざまな方法で再構築できます。このテストでは、カスタム Powershell スクリプトが使用されました(Reconstruct-Payload.ps1 にあります)。
再構築された zip ファイルの MD5 ハッシュ(CE6CFFEA60C6CDF40C998E56B6EFBD20)は、Virus Total で見つかった期待されるハッシュと一致します。



2 番目の方法では、Microsoft の BITS プロトコルを利用します。このプロトコルは、ダウンロードリクエストをネイティブでチャンクに分割します。
このテストは、CLI ユーティリティ bitsadmin.exe を使用し、次のコマンドラインで行われました:
bitsadmin.exe /transfer <job name> /download /priority normal <URL> <path_destination_file>


結果の zip の MD5 ハッシュは、前のセクションで見つかったものと一致します。