Critical Remote Code Execution Vulnerability in vLLM via Mooncake Integration
2025/03/24 SecurityOnline — LLM を用いる推論やサービスで人気のライブラリ vLLM は、先日に発見された深刻なセキュリティ脆弱性に対処した。GitHub で 43,000 を超えるスターを獲得している vLLM は、広範なユーザーを抱えているため、重要な問題に発展する可能性もある。その脆弱性 CVE-2025-29783 の CVSS スコアは 9.0 と評価されている。

この脆弱性は、分散 LLM 展開に使用される機能 Mooncake と、vLLM を統合する仕組みに存在する。vLLM が Mooncake を使用するようにコンフィグされている場合には、安全が確保されないデシリアライゼーション・プロセスが、ZMQ/TCP を介してダイレクトに公開されてしまう。この公開により、攻撃者に対して、分散ホスト上でのリモート・コード実行が許されてしまう。
この問題のコアは、セキュリティ脆弱性が報告されている、pickle.loads() の使用に関係している。セキュリティ・アドバイザリには、「根本的な問題は、recv tensor() が recv impl を呼び出し、それが生のネットワーク・バイトを pickle.loads() に渡すところにある」と記載されている。
この脆弱性の深刻度には、いくつかの要因が関係している。
- Pickle デシリアライゼーション:Pickle デシリアライゼーションの脆弱性は、セキュリティ・コミュニティで多発しているものである。
- ネットワークの露出:Mooncake パイプは、TCP 経由の ZMQ を使用して、設計上ネットワーク経由で露出してしまう。それにより、この脆弱性の悪用の可能性が大幅に高まる。
- ネットワーク制御の欠如:Mooncake との統合により、すべてのインターフェイスでソケットが開かれてしまう。このペイロードを影響を受けるサービスへの送信を防ぐための、ユーザー・サイドからのネットワーク制御/認証制御などは存在しないようだ。
本質的に、この脆弱性により、Mooncake を使用して分散ホスト全体に KV を配布する、すべてのデプロイメントにおいてリモート・コード実行が可能になってしまう。vLLM と Mooncake を組み合わせて使用している場合は、直ちに対処する必要がある。
この脆弱性は、vLLM のバージョン 0.6.5 以上〜0.8.0 未満に影響を及ぼす。パッチが適用された、最新バージョンは 0.8.0 となる。vLLM バージョン 0.8.0 へと、速やかにアップグレードしてほしい。なお、この問題は、PR #14228 により解決されている。
文中の「pickle.loads() の脆弱性」について調べてみたところ、Python の公式ドキュメントでも pickle モジュールの安全性について警告がなされていました。pickle.loads() 関数は、もともとの設計上、危険性を含む関数であることがわかりました。なお、この脆弱性の CVSS スコアについて、元の記事では 10.0 とされていましたが、2025/03/21 にスコアが 9.0 に修正されたため、記事中の記載もそれにあわせて訂正しました。vLLM を利用する開発チームは、十分に ご注意ください。
You must be logged in to post a comment.