LMDeploy has Remote Code Execution by Pickle Deserialization via handle_zmq_recv in lmdeploy/lmdeploy/pytorch/disagg/conn/engine_conn.py
- Product
- lmdeploy
- CVE
- CVE-2025-66455
- Affected
- lmdeploy >= 0.9.2, < 0.16.0
- Fixed in
- 0.16.0
Last verified against sources: October 26, 2026
Am I affected?
lmdeploy: affected lmdeploy >= 0.9.2, < 0.16.0. Fixed in 0.16.0.
- Check your version: run
pip show lmdeploy. Versions >= 0.9.2, < 0.16.0 of lmdeploy are affected. [1]
What to do now
- Upgrade to the fixed version: run
pip install --upgrade "lmdeploy>=0.16.0"(first patched version 0.16.0). [1] - Upgrade to LMDeploy 0.16.0 or later. [1]
- Prevent untrusted clients from reaching /distserve/* endpoints. [1]
- Restrict the DistServe HTTP and ZeroMQ control planes to trusted cluster networks. [1]
- Configure API-key authentication. [1]
General practice, not from the source: if the affected software could read tokens or credentials, rotate them after upgrading; pin versions and review changes before updating tools your agents run.
What happened
- LMDeploy's DistServe control plane used recv_pyobj() to read messages from a ZeroMQ socket, and that function uses Python pickle, which can run code while rebuilding an object. [1]
- The address of the other side came from the POST /distserve/p2p_connect HTTP endpoint. [1]
- An attacker who could reach an affected DistServe API server could make it connect to an attacker-controlled ZeroMQ endpoint and deserialize a crafted pickle payload. [1]
- API-key authentication is off unless the operator turns it on. [1]
Impact
- An attacker could run arbitrary code as the LMDeploy serving process. [1]
- This can expose model weights, prompts, credentials, attached storage, cluster-network services, and host or GPU resources. [1]
- An attacker may also modify or terminate the serving process. [1]
- Affected DistServe deployments without API keys allowed unauthenticated remote code execution with the privileges of the LMDeploy serving process. [1]
What was done
- The maintainers replaced the pickle-based ZeroMQ protocol with JSON serialization. [1]
- Received objects are validated using the DistServeCacheFreeRequest Pydantic schema before use. [1]
- Invalid or off-schema messages are rejected without terminating the receive loop. [1]
- The fix was released in LMDeploy 0.16.0. [1]
Sources
- GHSA-2vh9-42vm-xmv2 — GitHub Advisory Database
Every statement above was checked against these sources before publishing. Spotted an error? Tell us and we will correct it with a dated note.
Share advisory brief with your team
Copy a plain-text summary for Slack, GitHub issues, or team security channels.
[CVE-2025-66455] LMDeploy has Remote Code Execution by Pickle Deserialization via handle_zmq_recv in lmdeploy/lmdeploy/pytorch/disagg/conn/engine_conn.py
Product: lmdeploy | Affected: lmdeploy >= 0.9.2, < 0.16.0 | Fixed in: 0.16.0
Summary: LMDeploy's DistServe control plane used recv_pyobj() to read messages from a ZeroMQ socket, and that function uses Python pickle, which can run code while rebuilding an object.
Source & remediation on AgentArmorHQ: https://agentarmorhq.com/incidents/2026/09/cve-2025-66455-lmdeployCorrections
Report an error or request a correction. We review requests within 5 business days and add a dated correction note.
Discussions for CVE-2025-66455
Ask questions or share configuration tips. Governed by our Community Rules & Terms.
No posts match this filter yet.
Be the first to ask a question or share a working tip.