<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>LMCache (&gt;= 0.3.9, &lt; 0.5.6) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/lmcache--0.3.9--0.5.6/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Fri, 16 Oct 2026 22:28:14 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/lmcache--0.3.9--0.5.6/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Remote Code Execution in LMCache Multiprocess ZMQ Transport</title><link>https://feed.craftedsignal.io/briefs/2026-10-lmcache-rce/</link><pubDate>Fri, 16 Oct 2026 22:28:14 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-10-lmcache-rce/</guid><description>LMCache versions 0.3.9 through 0.5.5 are vulnerable to unauthenticated remote code execution due to insecure pickle deserialization within the multiprocess ZeroMQ transport layer.</description><content:encoded><![CDATA[<p>LMCache is vulnerable to unauthenticated remote code execution (RCE) via unsafe pickle deserialization in its multiprocess (distributed) mode transport. The vulnerability exists in the ZeroMQ ROUTER socket that LMCache opens to allow worker processes to register and share KV cache blocks. This socket lacks authentication mechanisms such as CURVE, ZAP, or password validation. By default, the transport binds to localhost, but it becomes remotely exploitable when operators bind it to routable network interfaces using the --host parameter.</p>
<p>An attacker can send a crafted msgpack-encoded message to the transport port (default 5555) containing a malicious pickle payload within a register request. This payload is deserialized via <code>pickle.loads</code> inside <code>DeviceIPCWrapper.Deserialize</code> before the application handler validates the input. The code executes with the privileges of the LMCache process, which, in official container images, runs as root. The vulnerability affects LMCache versions 0.3.9 through 0.5.5 and related release candidates.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker performs network reconnaissance to identify reachable LMCache ZeroMQ transport ports (default 5555).</li>
<li>Attacker generates a malicious pickle object designed to execute arbitrary OS commands (e.g., <code>os.system</code>).</li>
<li>Attacker encodes the malicious payload using the <code>msgspec.msgpack</code> format, specifically targeting the extension code 1 used by <code>DeviceIPCWrapper</code>.</li>
<li>Attacker constructs a <code>REGISTER_KV_CACHE</code> message frame containing the malformed serialized object.</li>
<li>Attacker uses a ZMQ DEALER socket to send the multipart message to the target LMCache server.</li>
<li>The LMCache server receives the message and triggers the vulnerable <code>pickle.loads</code> function during the argument decoding phase.</li>
<li>The arbitrary command executes on the host with the permissions of the LMCache service process.</li>
<li>Attacker achieves persistent access, data exfiltration, or further lateral movement within the container or host environment.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability allows unauthenticated attackers to achieve full remote code execution on any LMCache node where the ZMQ transport is bound to a routable IP address. Official container images are documented to run the LMCache process as root, elevating the severity of the exploit to full system compromise. If the service is left on default localhost bindings, the impact is limited to local privilege escalation or container escape if reachable by other processes on the same host.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to LMCache 0.5.6 or later, which replaces pickle with typed MessagePack descriptors and adds input validation.</li>
<li>Apply firewall rules or network policies to restrict access to TCP port 5555, ensuring only trusted peer traffic is permitted.</li>
<li>Reconfigure the LMCache deployment to bind the transport to localhost unless multi-node functionality is strictly required.</li>
<li>Run the LMCache service as a non-privileged user rather than root to reduce the blast radius of potential compromises.</li>
<li>Audit logs and network connections to port 5555 for any anomalies, as the server will log a type error after the malicious payload has already been executed.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>rce</category><category>deserialization</category><category>multiprocess</category><category>zeromq</category></item></channel></rss>