LMCache: Unauthenticated remote code execution via pickle deserialization
Summary
LMCache in multiprocess (distributed) mode opens an unauthenticated ZeroMQ transport. Incoming messages are decoded with pickle.loads, so a single crafted message to the transport port (default 5555) can execute code as the user running LMCache, which is root in the official container images. The transport binds to localhost by default, so the risk applies mainly when a routable address is set with --host, as multi-node deployments do. Versions 0.3.9 to 0.5.5 and the 0.5.6 release candidates are affected.
Affected
- LMCache 0.3.9 up to but not including 0.5.6, in multiprocess mode
- Exposed when the transport binds a routable address (--host)
- Default localhost binding is not exposed
- The v0.5.6 example Kubernetes deployment still binds 0.0.0.0
Fixed in
- LMCache 0.5.6 or later (PR #5644). Upgrade workers and servers together, as the wire format has changed.
- The official v0.5.6 images still run as root. Non-root images and the localhost binding in the example deployment are included in v0.5.7rc2.
Workaround
- Keep the transport on localhost and do not set a routable --host unless it is required
- Restrict port 5555 (or the configured port) to known peers with network policies or host firewall rules
- Run the LMCache process as a non-root user
- Review deployments based on the old Kubernetes example, which bound all interfaces
Exploitation
- No in-the-wild exploitation known at the time of writing.
- CISA SSVC assessment: exploitation none, automatable yes, technical impact total.
- The JFrog write-up includes a proof-of-concept section.
Our recommendation
- Inventory LMCache installations (pip, containers, vLLM or SGLang integrations) and check the --host setting and whether port 5555 is reachable.
- Upgrade to 0.5.6 or later. If an upgrade is not possible at once, restrict the port immediately.
- Run as non-root and confirm the running version after the upgrade.
- If the port was reachable from untrusted networks, check for unexpected child processes, shells or outbound connections and treat the host as potentially compromised.
- Track the open follow-up items: RPC authentication (planned for 0.5.7) and pickle use on the engine-driven path (planned before 0.5.8).
Public exploits
Links to third-party sites, not checked by us – exploit code can contain malware. Only use it in isolated test environments.
- Proof of concept on GitHub (2 repositories)
rxsklife/CVE-2026-105192 · basesixtythree/B63-POC-CVE-2026-105192
Research sources
- LMCache blog: An Update on CVE-2026-105192 blog.lmcache.ai
- LMCache GitHub Security Advisory GHSA-w5f2-9q9c-ff4h github.com
- LMCache release v0.5.6 github.com
- LMCache PR #5644: replace pickle in device IPC descriptors github.com
- LMCache PR #5684: bind example Kubernetes deployment to localhost github.com
- LMCache PR #5685: run official images as non-root user github.com
- JFrog Security Research write-up research.jfrog.com
- LMCache v0.5.5 ipc_wrapper.py github.com
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 30 Oct 2026, 20:52.
Original description (NVD)
LMCache multiprocess mode, also called distributed mode, opens an unauthenticated ZeroMQ ROUTER so worker processes can register and share KV cache blocks. Messages on that socket are msgpack. Extension code 1 is passed to DeviceIPCWrapper.Deserialize, which calls pickle.loads, while the server is still decoding request arguments and before the handler runs. A single unauthenticated ZMQ DEALER message to the transport port (default 5555) therefore executes code as the user the LMCache process runs as. Official container images run that process as root. The transport binds to localhost unless the operator sets a routable address with --host, which is how multi-node deployments let peers connect. The decode path shipped in v0.3.9 and is present through v0.5.5, including the v0.5.6 release candidates. v0.5.6, published on 2026-10-14, removes pickle.loads from this path.
NVD references (11)
- https://blog.lmcache.ai/en/2026/10/13/an-update-on-cve-2026-105192/
- https://github.com/LMCache/LMCache
- https://github.com/LMCache/LMCache/blob/v0.3.9/lmcache/v1/multiprocess/custom_types.py
- https://github.com/LMCache/LMCache/blob/v0.5.5/lmcache/v1/platform/base/ipc_wrapper.py
- https://github.com/LMCache/LMCache/pull/5644
- https://github.com/LMCache/LMCache/pull/5684
- https://github.com/LMCache/LMCache/pull/5685
- https://github.com/LMCache/LMCache/releases/tag/v0.5.6
- https://github.com/LMCache/LMCache/security/advisories/GHSA-w5f2-9q9c-ff4h
- https://pypi.org/project/lmcache/
- https://research.jfrog.com/vulnerabilities/lmcache-is-vulnerable-to-unauthenticated-remote-code-execution-via…
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
