Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessScan network for randomized RPC port
-
DeliveryConnect to unauthenticated ZMQ RPC socket
-
ExploitSend crafted malicious pickle payload
-
Executionpickle.loads() deserializes in call_and_response()
-
ImpactAttacker gains remote shell as service user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the victim to run LMDeploy 0.9.1-0.10.1 with the AsyncRPCServer (zmq_rpc.py) RPC service started AND reachable from the attacker's network position - the server performs no IP-source validation and no authentication on the ZMQ channel, and call_and_response() calls pickle.loads() on raw received bytes. Limiting factors: the RPC listening port is randomized, so the attacker must port-scan to locate it (no other credential or user interaction is needed); and if the deployment already confines the RPC socket to localhost/loopback or a trusted host, remote exploitation is not possible. Upgrading to 0.10.2 both patches deserialization exposure and binds the RPC to localhost only. |
| Impact | This is a genuine high-priority vulnerability, not a paper-tiger high CVSS. The vendor CVSS:3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8) is well-justified: CWE-502 unsafe pickle.loads() on attacker-supplied ZMQ RPC messages yields unauthenticated remote code execution, and the GHSA advisory contains a concrete working proof-of-concept (reverse shell to 202.112.47.27:4444), so publicly available exploit code exists. Two signals temper the raw score without contradicting it: (1) the fix commit is PR #4017 'zmqrpc localhost only', confirming the intended mitigation is to bind the RPC socket to loopback - meaning exploitability hinges on the server being reachable on a routable interface, which the advisory says was the pre-patch behavior since the server 'does not validate the connecting IP'; (2) the advisory itself notes the RPC port is randomized, so an attacker must port-scan to locate the service - a discovery hurdle, not a true CVSS access-complexity increase. No CISA KEV listing and no EPSS score are provided, so there is no evidence of active in-the-wild exploitation despite the public PoC - consistent with a niche LLM-serving toolkit rather than a mass-exploited target. Net: treat as urgent-patch for any exposed LMDeploy 0.9.1-0.10.1 RPC deployment; lower urgency if the RPC socket is already confined to localhost or a trusted network segment. |
| Exploit ScenarioDerived | A victim runs LMDeploy (0.9.1-0.10.1) with the AsyncRPCServer listening on a network-reachable interface. An attacker scans for the randomized RPC port, connects (the server never validates the source IP), and sends a malicious pickle payload that call_and_response() deserializes via pickle.loads(), executing an embedded __reduce__ os.system reverse-shell command and granting the attacker a shell on the victim host. A complete working PoC is published in the GHSA advisory, so no exploit development is required. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Remote code execution in InternLM LMDeploy versions 0.9.1 through 0.10.1 allows unauthenticated network attackers to run arbitrary commands by sending crafted pickle payloads to the AsyncRPCServer RPC endpoint (zmq_rpc.py). The service deserializes raw messages with pickle.loads() and performs no authentication or IP validation, so any attacker who can reach the randomized port-typically found by scanning-can trigger code execution; publicly available exploit code exists (proof-of-concept with reverse shell demo), and the CVSS 3.1 score is 9.8. This is not confirmed actively exploited (no CISA KEV listing), and exploitation is not possible if the RPC service is bound exclusively to localhost; upgrading to 0.10.2 patches the deserialization flaw and restricts the RPC to localhost.
RemediationAI
Upgrade to LMDeploy 0.10.2 (vendor-released patch) as the primary fix; this version patches the deserialization exposure and binds the zmqrpc server to localhost only (PR #4017), which prevents remote exploitation. If immediate upgrade is not possible, restrict the AsyncRPCServer to localhost or a trusted network segment by configuring the RPC binding and/or blocking its dynamically assigned port with host or network firewall rules-note that the randomized port requires scanning to find, so closing all unnecessary ports reduces exposure. Alternatively, disable the RPC service entirely if it is not required for your deployment; trade-off is loss of distributed inference functionality. Monitor for unexpected port scans or connections to the LMDeploy RPC port. Refer to the vendor advisory (https://github.com/InternLM/lmdeploy/security/advisories/GHSA-5h8j-6crg-7rmw) and release notes (https://github.com/InternLM/lmdeploy/releases/tag/v0.10.2) for details.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
LMDeploy uses a ZeroMQ-based RPC layer for communication between its components; the AsyncRPCServer class in zmq_rpc.py handles incoming requests in call_and_response(), which calls pickle.loads() directly on the received bytes without any sanitization or class whitelist. This is a textbook CWE-502 deserialization-of-untrusted-data flaw: pickle is not a safe format for untrusted input, and its __reduce__ mechanism allows an attacker to instantiate arbitrary classes and execute commands during deserialization. The affected package is pip/lmdeploy, identified by CPE cpe:2.3:a:internlm:lmdeploy:*:*:*:*:*:*:*:* (the CPE does not encode version granularity, but the vendor confirms the vulnerable range is >=0.9.1, <0.10.2). The RPC server lacks authentication and does not validate the source IP, and although the listening port is randomized, an attacker on the network can port-scan to locate it; version 0.10.2 contains the vendor patch, with the release notes specifically citing a change to bind zmqrpc to localhost only (PR #4017).
Know when Lmdeploy gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Unauthenticated network-reachable RPC deserializing attacker pickle gives direct RCE with full host compromise; randomized port is a discovery hurdle, not CVSS access complexity, so AC:L.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
LMDeploy is a toolkit for compressing, deploying, and serving large language models. Starting in version 0.9.1 and prior to version 0.10.2, the LMdeploy implements an rpc server (AsyncRPCServer in zmq_rpc.py) for supporting the RPC communications. In its core functionality call_and_response(), I found it will directly use the pickles.loads() to deserialize the received messages without any sanitization, hence resulting in a remote code execution vulnerability by this RPC server. Version 0.10.2 contains a patch.
Articles & Coverage 1
Technical POC Analysis
Bug class: CWE-502, Deserialization of Untrusted Data.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
InternLM's LMDeploy model-serving framework (versions 0.9.1 through 0.10.1) contains a critical remote code execution flaw in its AsyncRPCServer endpoint that can hand an outside party full control of any host exposing that service. With publicly available exploit code exists and no vendor-released patch identified at time of analysis, every LMDeploy instance reachable beyond localhost is an immediate organizational exposure that could lead to data theft, service outage, and use of our infrastructure as a pivot point for further attacks. Leadership should care because the blast radius is not confined to the AI team - a single reachable instance can compromise the underlying host and any credentials, models, or data it can reach.
No vendor-released patch identified at time of analysis; the advisory text points to 0.10.2 as remediating. Interim mitigations: bind AsyncRPCServer exclusively to localhost (127.0.0.1), blocking all remote access; block the randomized RPC port at host firewalls, network firewalls, and cloud security groups; place LMDeploy instances on segmented networks with no inbound traffic from untrusted zones; terminate or disable the ZMQ RPC listener where the workflow does not require it; and monitor for unexpected inbound connections, new listeners, or anomalous deserialization activity on affected hosts.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Server-Side Request Forgery (SSRF) in InternLM LMDeploy's vision-language module allows remote unauthenticated attackers
Unauthenticated remote code execution in InternLM LMDeploy (versions 0.9.2 through 0.15.x) allows a remote attacker to e
Unauthenticated remote code execution in InternLM LMDeploy versions 0.9.0 through 0.18.0 lets remote attackers run arbit
Arbitrary code execution in InternLM LMDeploy 0.11 and earlier: the toolkit calls torch.load() without weights_only=True
A vulnerability was found in InternLM LMDeploy up to 0.7.1. Rated medium severity (CVSS 4.8), this vulnerability is low
A vulnerability was found in InternLM LMDeploy up to 0.7.1. Rated medium severity (CVSS 4.8), this vulnerability is low
Denial of service in InternLM LMDeploy through 0.17.0 lets unauthenticated remote attackers crash the distributed infere
Memory exhaustion in InternLM LMDeploy through 0.17.0 can be triggered by unauthenticated remote attackers who send repe
Server-side request forgery in InternLM lmdeploy's OpenAI-compatible vision API server lets unauthenticated remote attac
EUVD-2025-210921
GHSA-5h8j-6crg-7rmw
NVD
CVE.org
EPSS
Exploit-DB