Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach exposed api_server /update_weights endpoint
-
ExploitCraft base64-encoded malicious pickle in serialized_named_tensors
-
ExecutionForkingPickler.loads deserializes payload unvalidated
-
ImpactExecute 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
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
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.
Apply vendor patch.
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.
Remote code execution in InternLM LMDeploy versions 0.9.1 through 0.10.1 allows unauthenticated network attackers to run
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
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-2026-114111
GHSA-fq46-3gxq-v4vc
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB