Skip to main content

LMDeploy CVE-2026-119706

| EUVDEUVD-2026-114111 CRITICAL
Deserialization of Untrusted Data (CWE-502)
2026-10-30 VulnCheck GHSA-fq46-3gxq-v4vc
9.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Reach exposed api_server /update_weights endpoint
  2. Exploit
    Craft base64-encoded malicious pickle in serialized_named_tensors
  3. Execution
    ForkingPickler.loads deserializes payload unvalidated
  4. Impact
    Execute arbitrary OS commands as api_server process

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 a reachable LMDeploy api_server running an affected version (0.9.0-0.18.0) that exposes the /update_weights management endpoint, which in these versions accepts and pickle-deserializes HTTP bodies by default with no authentication (PR:N confirmed by vector). The attacker needs only network access to that endpoint and the ability to POST a base64-encoded pickle in serialized_named_tensors; no user interaction or credentials are needed. Limiting factors: the api_server and its /update_weights endpoint must be network-reachable (these are typically internal RL-training/weight-update deployments rather than public services), and the fixed releases close the default path - post-patch, pickle handling is disabled unless the operator explicitly sets LMDEPLOY_ALLOW_PICKLE_UPDATE_PARAMS=1 on the server.

Impact

All severity signals align toward high real-world risk. The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) describes a fully remote, low-complexity, unauthenticated attack with high confidentiality, integrity and availability impact, and the vuln.today Decision label is act_now. The underlying flaw is CWE-502 (untrusted pickle deserialization), confirmed by the PR #4964 source diff showing ForkingPickler.loads being called on an attacker-supplied base64 payload - this is one of the most reliable RCE primitives in Python, so the AC:L rating is well supported. Exploitation status is 'no public exploit identified at time of analysis': the input shows no KEV listing and no confirmed POC flag, only a VulnCheck advisory and a vendor issue/PR. No EPSS score was provided, so statistical exploitation probability cannot be quantified here. The main factor moderating raw severity is exposure: LMDeploy api_server instances are typically internal RL-training/inference endpoints, so widespread internet-facing exposure is not established by the data. Net: treat as a genuine high priority (act_now) given a confirmed, patched, unauthenticated deserialization RCE mechanism, not merely a high-CVSS-but-low-risk issue - but note KEV=NO means active exploitation is not confirmed.

Exploit ScenarioDerived

A remote, unauthenticated attacker reaches an LMDeploy api_server (version 0.9.0-0.18.0) exposing the /update_weights endpoint and sends an HTTP POST containing a base64-encoded malicious pickle in the serialized_named_tensors field. ForkingPickler.loads deserializes it without validation, executing arbitrary OS commands with the privileges of the api_server process. No public working exploit is confirmed in the input, though a VulnCheck advisory describes the flaw.

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

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

Alert me

AnalysisAIv1 – Oct 30, 2026

Unauthenticated remote code execution in InternLM LMDeploy versions 0.9.0 through 0.18.0 lets remote attackers run arbitrary OS commands as the api_server process by POSTing a base64-encoded crafted pickle in the serialized_named_tensors field of the /update_weights endpoint, which is passed to ForkingPickler.loads without validation. Exploitation requires only network reachability to a management endpoint that these versions expose and deserialize by default with no authentication (CVSS 4.0 vector confirms PR:N/UI:N). Severity is rated 9.3 and the vuln.today decision label is act_now; no public exploit code has been identified at time of analysis, but the attack surface is a plain, unauthenticated HTTP body.

RemediationAI

Patch available per vendor advisory: upgrade to a release containing https://github.com/InternLM/lmdeploy/pull/4964, which changes /update_weights to reject pickle payloads by default; the advisory does not state an exact fixed version number, so confirm with the vendor advisory and the project repository before rollback. After upgrading, update weight-push clients to send load_format='safetensors' via serialize_named_tensors_safetensors() (the recommended path) or a structured dict of tensors, because the previous serialize_state_dict() pickle flow is no longer accepted by default. For PyTorch deployments, move weight updates to POST /update_weights_from_distributed (NCCL) or POST /update_weights_from_ipc (checkpoint-engine), which do not pickle HTTP bodies. The only supported way to restore XTuner same-node CUDA IPC over HTTP /update_weights is setting LMDEPLOY_ALLOW_PICKLE_UPDATE_PARAMS=1 on the server process (Ray workers inherit it through get_all_envs()); doing so re-enables the unauthenticated deserialization sink, so the vendor explicitly says not to enable it on untrusted public endpoints. Until patching is possible, the practical compensating control is to stop exposing /update_weights: restrict the api_server bind and network access to the endpoint so only trusted same-node training infrastructure can reach it, accepting that weight updates over that path are unavailable to other clients.

Affected VersionsENISA

LMDeploy 0.9.0 ≤0.18.0

Affected Packages

euvd lmdeploy no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

LMDeploy is InternLM's LLM deployment and serving toolkit; its api_server exposes OpenAI-compatible inference plus management endpoints, including /update_weights, used to push new model weights into a running engine for RL-training and online weight-update workflows. The vulnerable path (lmdeploy/serve/openai/endpoints/management.py, lines 55-60 in v0.18.0, feeding lmdeploy/turbomind/turbomind.py line 345 and the PyTorch model agent's _deserialize_weights) base64-decodes the supplied payload and calls multiprocessing.reduction.ForkingPickler.loads on it, a Python pickle deserialization sink. This is CWE-502: any object graph encoded in the pickle can execute code through __reduce__ during unpickling, so the attacker's payload runs with the privileges of the api_server process. The upstream fix (PR #4964) removes the unconditional deserialization, introduces is_pickle_serialized_named_tensors/load_safetensors_serialized_named_tensors/coerce_update_params_tensor helpers, and makes the endpoint reject pickle bodies by default unless load_format='safetensors' (recommended) or a structured tensor dict is supplied; the legacy XTuner same-node CUDA IPC path using serialize_state_dict()/FlattenedTensorBucket is gated behind the LMDEPLOY_ALLOW_PICKLE_UPDATE_PARAMS=1 server-side environment variable, inherited by Ray workers via get_all_envs(). The trigger is documented as a plain HTTP request to the management endpoint; no authentication, user interaction or special configuration is required on affected versions.

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 (VulnCheck) PRIMARY 9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 9.8 CRITICAL

Unauthenticated network POST to /update_weights triggers pickle deserialization RCE as the server process (PR:N, AC:L, AV:N), yielding full C/I/A; scope unchanged.

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 (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

InternLM LMDeploy 0.9.0 through 0.18.0 contains an unauthenticated remote code execution vulnerability that allows remote attackers to run OS commands by sending pickled data to the /update_weights endpoint. Attackers can submit a base64-encoded crafted pickle in serialized_named_tensors, which ForkingPickler.loads deserializes without validation, executing commands as the api_server process.

Executive ViewAI

Why It Matters

A critical unauthenticated remote code execution vulnerability (CVE-2026-119706) in InternLM LMDeploy versions 0.9.0 through 0.18.0 allows any network-adjacent attacker to execute arbitrary OS commands as the api_server process via a crafted request to the /update_weights endpoint. This directly affects internal AI infrastructure, potentially compromising model integrity, data confidentiality, and the availability of deployed inference services. Leadership should prioritize immediate patching due to the low attack complexity and the ease of exploiting a plain, unauthenticated HTTP endpoint.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
1.0%
Top 36% exploitable
Prevalence
Medium
popular open-source LLM inference/serving toolkit, specialized deployment
Data Quality
3 sources
Confidence: Low

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 No
EPSS 1.0%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Total

Priority Score

47
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +46
PoC: 0
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