何が起きたか
LMCacheのマルチプロセス/分散モードは、ワーカーがKVキャッシュブロックを共有できるように、認証なしのZeroMQ ROUTER(デフォルトポート5555)を開きます。メッセージはmsgpackで、拡張コード1はDeviceIPCWrapper.Deserializeに渡され、リクエスト引数をデコードしながらpickle.loadsを呼び出します。そのため、マルチノードデプロイのようにトランスポートがルーティング可能なアドレスにバインドされている場合、認証なしの単一のZMQメッセージでLMCacheプロセスとしてコードが実行されます(公式コンテナイメージではroot)。
なぜ重要か
LMCacheは多くのチームがvLLM推論サーバーに組み込むKVキャッシュ層です。トランスポートポートに到達できる攻撃者は、モデルサーバーホスト上で事前認証RCEを実行し、モデルウェイトやプロンプトキャッシュを読み書きし、サービングクラスタ内にピボットできます。これはまさにAIサービングインフラの欠陥です。関連する問題(CVE-2026-107204)とオプトインの/run_scriptエンドポイントが露出を拡大しています。
攻撃経路
トランスポートポートへの認証なしの単一のZMQ DEALERメッセージで、pickle.loadsをトリガーする細工されたmsgpack拡張を運ぶ。
影響を受けるシステム
LMCache 0.3.9から0.5.5(および0.5.6リリース候補)をvLLMのKVキャッシュ層として使用。ZeroMQトランスポートがルーティング可能なアドレスにバインドされた場合、またはK8sマニフェストの例が全インターフェースにバインドされた場合に露出。
緩和策
LMCache 0.5.6にアップグレード(pickleをバージョン付き型付きMessagePackに置き換え、K8sマニフェストの例はlocalhostにバインド、イメージは非rootで実行)。それまではトランスポートをlocalhost/信頼済みクラスタに保ち、ポート5555をファイアウォールで保護し、非rootで実行。