
CVE-2024-1561 - Gradio 任意ファイル読み取り
CVE-2024-1561 は、Gradio の バージョン 4.13.0 未満 に影響する任意ファイル読み取りの脆弱性です。Gradio は、機械学習モデルや AI アプリケーション向けの Web インターフェースを迅速に構築するために使用される人気の Python フレームワークです。
この脆弱性は、/component_server エンドポイントが内部の Component クラスのどのメソッドを呼び出せるかを適切に制限していないために存在します。攻撃者はこの動作を悪用して、HTTP 経由で公開されることを意図されていないメソッドを呼び出すことができます。
そのようなメソッドの一つである move_resource_to_block_cache は、ローカルファイルシステム上のファイルを Gradio の一時キャッシュディレクトリにコピーすることを許可します。ファイルがコピーされると、/file エンドポイントを通じてアクセス可能になり、攻撃者はその内容を取得できるようになります。
この脆弱性は直接リモートコード実行をもたらすものではありませんが、サーバー上の機密ファイルを公開する可能性があり、認証情報、設定ファイル、API キー、トークン、その他の攻撃に有用な情報を収集するために悪用される可能性があります。
4.13.0 以降のバージョンでは、任意のメソッド呼び出しを防ぐために必要なセキュリティチェックが含まれています。
この問題は、/component_server エンドポイント内の不十分なバリデーションに起因します。
Gradio は、リクエストを安全な呼び出し可能関数のリストに制限する代わりに、攻撃者がコンポーネントインスタンスに属する任意のメソッド名を指定することを許可していました。
内部メソッド:
move_resource_to_block_cache()
は入力としてファイルシステムパスを受け入れるため、攻撃者はアプリケーションにサーバー上の読み取り可能な任意のファイルをキャッシュするように指示できます。
キャッシュされると、そのファイルは Gradio の通常のファイル提供機能を通じて公開されます。
成功した攻撃は一般に次の手順に従います。
/config エンドポイントにクエリを送信する。/component_server にリクエストを送信する。move_resource_to_block_cache メソッドを呼び出す。/etc/passwd)を指定する。/file エンドポイントを通じてキャッシュされたファイルをダウンロードする。このプロセスにより、Gradio プロセスが読み取り可能な任意のファイルをリモートから取得できます。
POST /component_server HTTP/1.1
Host: target
Content-Type: application/json
{
"component_id": "3",
"data": "/etc/passwd",
"fn_name": "move_resource_to_block_cache",
"session_hash": "aaaaaaaaaaa"
}
成功した場合、Gradio はキャッシュファイルの場所を返します。
その後、攻撃者は次のようにリクエストします。
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
これにより内容を取得できます。
悪用に成功すると、攻撃者は以下のような機密ファイルを読み取る可能性があります。
/etc/passwd.env)影響の程度は Gradio アプリケーションの権限に依存します。
この脆弱性を remediate するには:
このリポジトリは教育目的、セキュリティ研究、および許可された侵入テストのためにのみ提供されています。所有していない、または評価する許可を得ていないシステムをテストする前に、必ず明示的な許可を取得してください。