vLLM: マルチモーダル画像処理システムにおける、検証されていない`mm_processor_kwargs`を利用したDoS攻撃の可能性 (Isaac, InternVL, H2OVLなど)
## 概要
APIクライアントは、リクエストごとに任意の`mm_processor_kwargs`値を設定できます。vLLMは、これらの値をマルチモーダルレンダリングおよび処理パイプラインを通じて、Hugging Faceやカスタムの画像/ビデオプロセッサのコンストラクタおよび呼び出しに渡します。
これにより、画像サイズ、パッチサイズ、パッチ数、クロップ数、またはフレーム数などの、リソースを消費するパラメータを、リモートクライアントが制御できるようになります。
入力画像をアップスケールするプロセッサの場合、単一のリクエストで、APIサーバーまたはワーカーをメモリ不足で停止させるほどの大きなメモリ領域を割り当てようとする可能性があります。
## 影響を受けるコンポーネント
このリクエストごとのフィールドは、コミット`041e29471671a3d43afedb6a749421d56ef4d3e7`で導入され、v0.7.3で初めてリリースされました。
この汎用的なフォワードパスは、現在の`main`ブランチにも存在します。
Isaacのパスは、具体的な高影響の例です。
- `ChatCompletionRequest.mm_processor_kwargs`
- `OnlineRenderer`のリクエストに追加されるパラメータ
- `MMProcessorInputs.hf_processor_mm_kwargs`
- `BaseMultiModalProcessor.info.get_hf_processor(**hf_processor_mm_kwargs)`
- `IsaacProcessingInfo.get_image_processor(**kwargs)`
- `IsaacImageProcessor(**kwargs)`
- `process_vision_for_patches()`
InternVL由来のプロセッサ、H2OVL、Step3VL、NemotronVL、およびその他のマルチモーダルプロセッサにも、同様のコンストラクタへのパラメータの受け渡しが存在します。この問題は、共有のリモート入力境界に起因し、特定のモデルリストに限定されるものではありません。
## 影響
- **可用性:** 1つのリクエストで、CPUまたはGPUメモリを使い果たし、共有サービスプロセスを停止させる可能性があります。
- **範囲:** 影響を受けるサービスインスタンスのすべてのユーザーが、サービスを利用できなくなる可能性があります。
- **認証:** vLLMのAPIキーはオプションであるため、外部認証レイヤーがない環境では、特権なしでリモートからアクセスできる可能性があります。
## 対策
APIサーバーのリクエストごとに、デフォルトでは、空でない`mm_processor_kwargs`を拒否します。信頼できるクライアントのみが、既存のオーバーライド機能を明示的に利用できます。サーバーレベルの`--mm-processor-kwargs`およびオフラインのLLMオーバーライドは引き続き利用可能です。
この共通の制限は、現在のおよび将来のマルチモーダルプロセッサを対象とし、モデル固有のリストや、カスタムプロセッサ引数を逃してしまう可能性のあるブラックリストを維持する代わりに、より包括的なアプローチです。
この修正は、以下の場所でマージされました: https://github.com/vllm-project/vllm/pull/58830
影響を受けるパッケージ:
- pip (Python) vllm: 影響を受けるバージョン >= 0.7.3, < 0.31.0、修正されたバージョン 0.31.0