Skip to main content

InternLM LMDeploy EUVDEUVD-2025-210921

| CVE-2025-59953 CRITICAL
Deserialization of Untrusted Data (CWE-502)
2026-09-16 GitHub_M GHSA-5h8j-6crg-7rmw
9.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Scan network for randomized RPC port
  2. Delivery
    Connect to unauthenticated ZMQ RPC socket
  3. Exploit
    Send crafted malicious pickle payload
  4. Execution
    pickle.loads() deserializes in call_and_response()
  5. Impact
    Attacker 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
Patch available 0.7% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

LMDeploy 0.9.1, < 0.10.2

Affected Packages

pypi lmdeploy fix: 0.10.2

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

Vendor (GitHub_M) PRIMARY 9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 9.8 CRITICAL

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 17:04 EUVD
CVE Published
Sep 16, 2026 - 15:36 cve.org
CRITICAL 9.8

DescriptionCVE.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.

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

Why It Matters

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.

Business Impact: Severe
Compensating Controls

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

EPSS Score
0.7%
Top 49% exploitable
Prevalence
Low
specialized LLM inference/serving toolkit, niche vs mainstream vLLM
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.7%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Very High

Priority Score

70
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +49
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy