CVE-2026-33625: LMDeploy: eval() injection via malicious model config
GHSA-3hmm-rh5q-gwwrHIGHPoC AVAILABLECISA: ATTENDLMDeploy, a popular LLM serving toolkit, passes the `quantization_config.quant_dtype` value from a HuggingFace model config straight into Python's `eval()`, so anyone who can publish a model can run arbitrary code on the machine that loads it. The attack needs only a user to load the model (CVSS 8.8, network vector, low complexity, no privileges), and organizations routinely pull community models into inference clusters that hold GPUs, API keys and proprietary data. Near-term mass exploitation looks limited: EPSS is 0.44% (64th percentile), CISA SSVC says ATTEND, there is no public exploit or Nuclei template, and it is not in CISA KEV. Even so, the package has 9 other CVEs and the model-supply-chain vector is easy to weaponize. Upgrade to lmdeploy 0.12.3 or later, and until then load models only from vetted, pinned sources.
What is the risk?
High severity, moderate near-term likelihood. Exploitation is trivial for anyone able to publish or tamper with a model repository, since a single crafted JSON field triggers eval(). The user-interaction requirement is easily met because loading a model is routine in model-serving workflows. Exploitation probability signals are modest (EPSS 0.00442, no public PoC, not in KEV), but impact is full confidentiality, integrity and availability compromise of the inference host. Only versions >= 0.12.1 and < 0.12.3 are affected, which narrows exposure. The CWE labeling (CWE-400) does not match the actual code-injection flaw, so scanners keyed on CWE may misclassify it.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| LMDeploy | pip | >= 0.12.1, < 0.12.3 | 0.12.3 |
Do you use LMDeploy? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade lmdeploy to 0.12.3 or later. 2) Inventory hosts running lmdeploy 0.12.1-0.12.2 via pip freeze or SBOM tooling. 3) Until patched, load models only from trusted organizations, pin to specific commit hashes, and review config.json (especially quantization_config.quant_dtype) before loading. 4) Run inference workloads in sandboxed containers with least-privilege, no long-lived cloud credentials, and restricted egress. 5) Detection: alert on unexpected child processes, outbound connections or file writes from lmdeploy serving processes, and audit recent model downloads for non-standard quant_dtype values containing parentheses, dunder names or import statements.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-33625?
LMDeploy, a popular LLM serving toolkit, passes the `quantization_config.quant_dtype` value from a HuggingFace model config straight into Python's `eval()`, so anyone who can publish a model can run arbitrary code on the machine that loads it. The attack needs only a user to load the model (CVSS 8.8, network vector, low complexity, no privileges), and organizations routinely pull community models into inference clusters that hold GPUs, API keys and proprietary data. Near-term mass exploitation looks limited: EPSS is 0.44% (64th percentile), CISA SSVC says ATTEND, there is no public exploit or Nuclei template, and it is not in CISA KEV. Even so, the package has 9 other CVEs and the model-supply-chain vector is easy to weaponize. Upgrade to lmdeploy 0.12.3 or later, and until then load models only from vetted, pinned sources.
Is CVE-2026-33625 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2026-33625, increasing the risk of exploitation.
How to fix CVE-2026-33625?
1) Upgrade lmdeploy to 0.12.3 or later. 2) Inventory hosts running lmdeploy 0.12.1-0.12.2 via pip freeze or SBOM tooling. 3) Until patched, load models only from trusted organizations, pin to specific commit hashes, and review config.json (especially quantization_config.quant_dtype) before loading. 4) Run inference workloads in sandboxed containers with least-privilege, no long-lived cloud credentials, and restricted egress. 5) Detection: alert on unexpected child processes, outbound connections or file writes from lmdeploy serving processes, and audit recent model downloads for non-standard quant_dtype values containing parentheses, dunder names or import statements.
What systems are affected by CVE-2026-33625?
This vulnerability affects the following AI/ML architecture patterns: model serving, LLM inference servers, model deployment pipelines, quantized model workflows, model registry consumers.
What is the CVSS score for CVE-2026-33625?
CVE-2026-33625 has a CVSS v3.1 base score of 8.8 (HIGH). The EPSS exploitation probability is 0.44%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.003ModelAML.T0011.000Unsafe AI ArtifactsAML.T0050Command and Scripting InterpreterAML.T0058Publish Poisoned ModelsAML.T0112.001AI ArtifactsCompliance Controls Affected
What are the technical details?
Original Advisory
LMDeploy is a toolkit for compressing, deploying, and serving large language models. Versions 012.1 through 0.12.2 contain a code injection vulnerability in `lmdeploy/pytorch/config.py` line 620 that allows an attacker to execute arbitrary Python code by publishing a malicious HuggingFace model with a crafted `quantization_config.quant_dtype` value. When a user loads the model with lmdeploy, the `quant_dtype` is passed to `eval(f'torch.{quant_dtype}')` without any validation. Version 0.12.3 contains a patch.
Exploitation Scenario
An attacker publishes a plausible-looking fine-tuned or quantized model on HuggingFace, or compromises an existing repository, with a config.json whose quant_dtype is a Python expression such as an __import__ call that spawns a reverse shell. An ML engineer or an automated deployment pipeline pulls the model and starts it with lmdeploy. The eval() executes the payload on load, giving the attacker a shell on the GPU inference host, from which they steal cloud and API credentials, exfiltrate proprietary models and data, and move laterally into the ML platform.
Weaknesses (CWE)
CWE-400Uncontrolled Resource ConsumptionPrimaryCWE-400Uncontrolled Resource ConsumptionPrimaryCWE-400Uncontrolled Resource ConsumptionCWE-400 — Uncontrolled Resource Consumption: The product does not properly control the allocation and maintenance of a limited resource.
- [Architecture and Design] Design throttling mechanisms into the system architecture. The best protection is to limit the amount of resources that an unauthorized user can cause to be expended. A strong authentication and access control model will help prevent such attacks from occurring in the first place. The login application should be protected against DoS attacks as much as possible. Limiting the database access, perhaps by caching result sets, can help minimize the resources expended. To further limit the potential for a DoS attack, consider tracking the rate of requests received from users and blocking requests that exceed a defined rate threshold.
- [Architecture and Design] Mitigation of resource exhaustion attacks requires that the target system either: The first of these solutions is an issue in itself though, since it may allow attackers to prevent the use of the system by a particular valid user. If the attacker impersonates the valid user, they may be able to prevent the user from accessing the server in question. The second solution is simply difficult to effectively institute -- and even when properly done, it does not provide a full solution. It simply makes the attack require more resources on the part of the attacker. recognizes the attack and denies that user further access for a given amount of time, or uniformly throttles all requests in order to make it more difficult to consume resources more quickly than they can again be freed.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:HReferences
Timeline
Related Vulnerabilities
CVE-2026-1197069.8LMDeploy: unauthenticated RCE via pickle in /update_weights
Same package: lmdeployCVE-2026-768509.8LMDeploy: RCE via unauth pickle deserialization
Same package: lmdeployCVE-2025-664559.8LMDeploy: pickle deserialization RCE in DistServe
Same package: lmdeployCVE-2025-599539.8LMDeploy: unsafe pickle deserialization allows RCE
Same package: lmdeployCVE-2025-677298.8lmdeploy: Deserialization enables RCE
Same package: lmdeploy