vLLM is a high-throughput and memory-efficient inference and serving engine for LLMs. When vLLM is configured to use Mooncake, unsafe deserialization exposed directly over ZMQ/TCP on all network interfaces will allow attackers to execute remote code on distributed hosts. This is a remote code execution vulnerability impacting any deployments using Mooncake to distribute KV across distributed hosts. This vulnerability is fixed in 0.8.0.
When vLLM is configured with Mooncake integration (used to distribute KV cache memory across hosts), data transmitted over the ZMQ/TCP protocol is deserialized in an unsafe manner without proper validation or authentication. An attacker with access to the local network (attack vector AV:A) can send a crafted payload to the listening ZMQ/TCP socket, resulting in arbitrary code execution on the target host. The scope of the vulnerability covers all network interfaces on which the service operates.
An attacker can gain full control over the compromised host — achieving confidentiality, integrity, and availability at a critical level (C:H/I:H/A:H) — and potentially spread to other nodes in the distributed infrastructure.
Update vLLM to version 0.8.0 or later, where the vulnerability has been removed. Additionally, until the patch is deployed, it is recommended to isolate vLLM hosts at the network level (firewall, network segmentation) so that ZMQ/TCP ports are inaccessible from untrusted network segments.
All vLLM deployments using Mooncake integration for distributing KV cache memory across distributed hosts, in versions prior to 0.8.0.
CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:HVllm
APPVllm0.6.5 – 0.8.0 (excl.)
Related vulnerabilities
Pominięcie uwierzytelnienia w vLLM — bypass klucza API OpenAI
vLLM: wyciek adresu sterty umożliwiający RCE przez endpoint multimodalny
vLLM: niezamierzone nasłuchiwanie TCPStore na wszystkich interfejsach sieciowych
RCE w vLLM poprzez deserializację pickle na niezabezpieczonych gniazdach ZeroMQ
RCE przez niebezpieczną deserializację w vllm MessageQueue.dequeue()