CVE-2026-92971: LMDeploy: unauthenticated assertion crash halts inference
HIGHCISA: TRACK*LMDeploy through 0.17.0 has a reachable assertion in its DistServe decode migration loop. An unauthenticated attacker can send a single migration_request with an empty remote_block_ids list, which raises an AssertionError, kills the engine loop, and makes every later inference request fail. The CVSS is 7.5 (network, low complexity, no privileges, availability impact only). Urgency is moderate: EPSS is 0.7% (48th percentile), the CVE is not in CISA KEV, there is no public exploit or Nuclei template, and CISA SSVC says TRACK*. The trigger is trivial, though, so any internet-reachable or loosely segmented LMDeploy deployment using DistServe/PD-disaggregation is exposed to a one-request outage. Check whether any LMDeploy endpoints are exposed, put authentication or network restrictions in front of them, and upgrade to a fixed release once the maintainers publish one (see upstream issue #4965). Confidentiality and integrity are not affected.
What is the risk?
Medium-High. Availability-only impact, but exploitation takes a single unauthenticated HTTP request with no AI/ML knowledge. Real-world likelihood is low to moderate (EPSS 0.7%, no known exploit, not in KEV). Exposure depends on whether the OpenAI-compatible API server is reachable by untrusted parties and whether DistServe/migration features are enabled. Inference services without a gateway or authentication are the most at risk. The engine does not recover on its own, so the outage persists until the process is restarted.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| LMDeploy | pip | — | No patch |
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 a release newer than 0.17.0 that fixes the validation (track https://github.com/InternLM/lmdeploy/issues/4965); if no fixed release exists, apply the upstream patch or add validation that rejects migration_request payloads with empty remote_block_ids. 2) Do not expose LMDeploy API servers directly to the internet; place them behind an authenticating reverse proxy or API gateway and restrict migration/DistServe endpoints to internal prefill/decode nodes (network policy, mTLS, or firewall). 3) Add a process supervisor (systemd, Kubernetes liveness/readiness probes) so a crashed engine loop triggers an automatic restart. 4) Detection: alert on AssertionError traces from engine_loop.py, sudden 5xx spikes or hung requests after a /v1/completions call, and POST bodies containing an empty remote_block_ids array or migration_request fields from untrusted sources. 5) Inventory LMDeploy versions across clusters with an SBOM or pip freeze scan.
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-92971?
LMDeploy through 0.17.0 has a reachable assertion in its DistServe decode migration loop. An unauthenticated attacker can send a single migration_request with an empty remote_block_ids list, which raises an AssertionError, kills the engine loop, and makes every later inference request fail. The CVSS is 7.5 (network, low complexity, no privileges, availability impact only). Urgency is moderate: EPSS is 0.7% (48th percentile), the CVE is not in CISA KEV, there is no public exploit or Nuclei template, and CISA SSVC says TRACK*. The trigger is trivial, though, so any internet-reachable or loosely segmented LMDeploy deployment using DistServe/PD-disaggregation is exposed to a one-request outage. Check whether any LMDeploy endpoints are exposed, put authentication or network restrictions in front of them, and upgrade to a fixed release once the maintainers publish one (see upstream issue #4965). Confidentiality and integrity are not affected.
Is CVE-2026-92971 actively exploited?
No confirmed active exploitation of CVE-2026-92971 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-92971?
1) Upgrade LMDeploy to a release newer than 0.17.0 that fixes the validation (track https://github.com/InternLM/lmdeploy/issues/4965); if no fixed release exists, apply the upstream patch or add validation that rejects migration_request payloads with empty remote_block_ids. 2) Do not expose LMDeploy API servers directly to the internet; place them behind an authenticating reverse proxy or API gateway and restrict migration/DistServe endpoints to internal prefill/decode nodes (network policy, mTLS, or firewall). 3) Add a process supervisor (systemd, Kubernetes liveness/readiness probes) so a crashed engine loop triggers an automatic restart. 4) Detection: alert on AssertionError traces from engine_loop.py, sudden 5xx spikes or hung requests after a /v1/completions call, and POST bodies containing an empty remote_block_ids array or migration_request fields from untrusted sources. 5) Inventory LMDeploy versions across clusters with an SBOM or pip freeze scan.
What systems are affected by CVE-2026-92971?
This vulnerability affects the following AI/ML architecture patterns: model serving, LLM inference engines, disaggregated prefill/decode (DistServe) deployments, OpenAI-compatible API gateways, RAG pipelines, agent frameworks.
What is the CVSS score for CVE-2026-92971?
CVE-2026-92971 has a CVSS v3.1 base score of 7.5 (HIGH). The EPSS exploitation probability is 0.70%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0029Denial of AI ServiceAML.T0040AI Model Inference API AccessAML.T0049Exploit Public-Facing ApplicationCompliance Controls Affected
What are the technical details?
Original Advisory
InternLM LMDeploy through 0.17.0 contains a reachable assertion vulnerability in the DistServe decode migration loop that allows unauthenticated attackers to terminate the inference engine. Attackers can submit a migration_request with an empty remote_block_ids list to trigger an AssertionError that crashes the engine loop and causes subsequent inference requests to fail.
Exploitation Scenario
An attacker finds an exposed LMDeploy OpenAI-compatible endpoint, for example through internet scanning or a misconfigured ingress. They send a completions request that includes a migration_request with remote_block_ids set to an empty list. The decode migration loop hits the assertion, the engine loop terminates, and all later inference calls fail. The attacker can repeat the request after each restart to keep the service down, disrupting customer-facing AI features or internal copilots with no credentials and no heavy traffic.
Weaknesses (CWE)
CWE-617 — Reachable Assertion: The product contains an assert() or similar statement that can be triggered by an attacker, which leads to an application exit or other behavior that is more severe than necessary.
- [Implementation] If the assertion statement is required (e.g., for security or reliability), change the invoking code to avoid the conditions that trigger the assertion.
- [Implementation] Consider changing the assertion to some other less "fatal" error. This might not be easy to implement, since other code may be needed to handle the error.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
- github.com/InternLM/lmdeploy
- github.com/InternLM/lmdeploy/blob/v0.17.0/lmdeploy/pytorch/engine/engine_loop.py
- github.com/InternLM/lmdeploy/blob/v0.17.0/lmdeploy/pytorch/utils.py
- github.com/InternLM/lmdeploy/blob/v0.17.0/lmdeploy/serve/openai/endpoints/completions.py
- github.com/InternLM/lmdeploy/issues/4965
- vulncheck.com/advisories/internlm-lmdeploy-through-0.17.0-assertion-denial-of-service
Timeline
Related Vulnerabilities
CVE-2025-664559.8LMDeploy: pickle deserialization RCE in DistServe
Same package: lmdeployCVE-2026-1197069.8LMDeploy: unauthenticated RCE via pickle in /update_weights
Same package: lmdeployCVE-2025-599539.8LMDeploy: unsafe pickle deserialization allows RCE
Same package: lmdeployCVE-2026-768509.8LMDeploy: RCE via unauth pickle deserialization
Same package: lmdeployCVE-2026-336258.8LMDeploy: eval() injection via malicious model config
Same package: lmdeploy