Description
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.
Published: 2026-10-07
Score: 9.8 Critical
EPSS: < 1% Very Low
KEV: No
Impact: Remote Code Execution
Action: Apply Patch
AI Analysis

Impact

MITLCache’s distributed mode exposes an unauthenticated ZeroMQ ROUTER socket on the default port. The server decodes incoming messages before running the request handler, passing any packet that contains Extension Code 1 to DeviceIPCWrapper.Deserialize. That function calls pickle.loads, which can execute arbitrary Python code. Consequently, a malicious ZMQ DEALER can cause the LMCache process to run attacker‑supplied code. If the process runs as root, the attacker gains full system privileges. The vulnerability is therefore a high‑severity Remote Code Execution flaw. The likely attack vector involves an attacker sending crafted ZMQ messages to the open port; because the server performs no authentication, the injected pickle payload is executed unconditionally.

Affected Systems

All deployments of LMCache are affected, as the advisory does not list any specific version restrictions. This includes containerized installations that run the LMCache process as root and any configuration that enables the distributed mode over a routable interface.

Risk and Exploitability

With a CVSS score of 9.8 the flaw is critical. The EPSS score is not available, but the lack of authentication, combined with the default local binding on port 5555, provides an uncomplicated local exploitation path. If an operator exposes the port to external networks, remote attackers can also leverage the vulnerability. The flaw is not listed in CISA's KEV catalog, indicating no widely known public exploits, yet the conditions make it highly exploitable in practice.

Generated by OpenCVE AI on October 7, 2026 at 11:21 UTC.

Remediation

Vendor Solution

Upgrade to LMCache 0.5.6 or later. That release replaces pickle in device IPC descriptors with versioned, typed MessagePack descriptors. Descriptors are validated before use, the wrapper type is chosen from a fixed local allowlist, and there is no pickle fallback. The change covers the ZeroMQ and gRPC paths. The wire format changed, so upgrade workers and servers together. The fix is PR #5644 and it is in the v0.5.6 tag. PR #5684, which binds the example Kubernetes deployment to localhost, and PR #5685, which runs the official images as a non-root user, were merged after the v0.5.6 tag was cut and are included in v0.5.7rc2. The v0.5.6 example deployment still passes --host 0.0.0.0, and the v0.5.6 images still run as root.


OpenCVE Recommended Actions

  • Upgrade LMCache to a release that disables or protects the pickle deserialization routine
  • If an update is not immediately possible, disable the distributed mode by configuring LMCache to run in single‑process mode or by removing any ZeroMQ bind parameters; additionally, bind the socket only to localhost and restrict access with a firewall
  • Run the LMCache process under a non‑root user and limit its container privileges
  • If ZeroMQ authentication is supported, enable it or use an alternative signed messaging protocol to prevent unauthenticated connections

Generated by OpenCVE AI on October 7, 2026 at 11:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-w5f2-9q9c-ff4h LMCache: Remote code execution via unsafe deserialization in multiprocess mode transport
History

Thu, 29 Oct 2026 10:30:00 +0000

Type Values Removed Values Added
Description 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. 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.
References

Wed, 07 Oct 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Wed, 07 Oct 2026 11:45:00 +0000

Type Values Removed Values Added
First Time appeared Lmcache
Lmcache lmcache
Vendors & Products Lmcache
Lmcache lmcache

Wed, 07 Oct 2026 10:00:00 +0000

Type Values Removed Values Added
Description 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.
Title LMCache Unauthenticated RCE in multiprocess mode via pickle deserialization
Weaknesses CWE-306
CWE-502
References
Metrics cvssV3_1

{'score': 9.8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'}


cve-icon MITRE

Status: PUBLISHED

Assigner: JFROG

Published:

Updated: 2026-10-29T10:24:45.984Z

Reserved: 2026-10-04T11:50:41.213Z

Link: CVE-2026-105192

cve-icon Vulnrichment

Updated: 2026-10-07T17:48:33.165Z

cve-icon NVD

Status : Deferred

Published: 2026-10-07T10:17:32.647

Modified: 2026-10-29T11:17:24.523

Link: CVE-2026-105192

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-07T11:30:16Z

Weaknesses
  • CWE-306

    Missing Authentication for Critical Function

  • CWE-502

    Deserialization of Untrusted Data