← All advisories
CVE-2025-59953criticalCode execution2026-09-16

CVE-2025-59953: LMDeploy's ZeroMQ RPC server unpickles incoming messages, remote code execution in 0.9.1 to 0.10.1

LMDeploy 0.9.1 up to 0.10.2 runs an RPC server (AsyncRPCServer in zmq_rpc.py) whose call_and_response() passes received messages straight to pickle.loads(). The server doesn't check where connections come from, so anyone on the network who finds its port can send a crafted pickle and get code execution. Upgrade to 0.10.2 or later.

01.

What it is

AsyncRPCServer.call_and_response() in zmq_rpc.py deserializes incoming RPC messages with pickle.loads() without any sanitization. A crafted pickle runs arbitrary Python on the host.

The reporter's proof of concept changed the client to point at a remote IP and opened a reverse shell. The port is randomized, but the advisory notes an attacker can scan for it.

Version 0.10.2 contains the patch.

02.

How to check

  1. Run pip show lmdeploy and see whether the version is 0.9.1 or later but below 0.10.2.
  2. Check whether hosts running LMDeploy expose high ports to networks you don't trust.
03.

How to fix

  1. Upgrade to LMDeploy 0.10.2 or later (current releases also include later pickle fixes such as 0.16.0).
  2. Firewall LMDeploy hosts so only trusted machines can reach their ports.
pip show lmdeploy | grep -i ^version
pip install -U 'lmdeploy>=0.16.0'
04.

Sources

More advisories for this tool
The weekly email

One email a week. Only what changed.

Every new security hole in AI coding tools, MCP servers, app builders and the stacks they generate (Next.js, Supabase, Node, PHP), each with how to check your app and the fix. No roundups of things you already read.

Free, one email a week. Read the latest issue first if you like. One-click unsubscribe in every email. We never sell or share addresses.