Summary
CVE-2026-93436 is a memory exhaustion (denial-of-service) vulnerability in vLLM, the open-source large language model inference and serving engine. Affecting versions up to and including 0.29.0, the flaw resides in the NIXL-based disaggregated (prefill/decode-split) deployment mode, where the decode-side worker fails to release tracking metadata for inference requests that are rejected or aborted. An unauthenticated remote attacker can exploit this by repeatedly submitting requests with max_tokens=0, causing worker memory to grow unbounded until the process crashes or must be restarted. The issue is rated HIGH severity (CVSS 8.7 under CVSS 4.0).
Technical details
- Root cause: In vLLM’s NIXL KV-connector push worker (
vllm/distributed/kv_transfer/kv_connector/v1/nixl/push_worker.py), when a decode-side request is rejected before scheduling, the worker enqueues an "empty recv" operation to release the paired prefiller. This empty-recv metadata is stored in the_recving_metadatatracking dictionary, but because no actual data transfer ever completes for it, the entry is never cleaned up. - Trigger conditions: Occurs specifically in disaggregated (prefill/decode split) deployments using the NIXL KV connector. Sending completion/chat requests with
max_tokens=0causes the request to be aborted withdo_remote_prefillstill active, generating an orphaned empty-recv entry each time. - Attack vector: Network-based, no authentication or user interaction required (AV:N/AC:L/AT:N/PR:N/UI:N). An attacker only needs API access to the inference endpoint.
- Impact: Repeated exploitation causes the
_recving_metadatadictionary to grow without bound, exhausting worker memory over time and leading to worker crash/restart — a sustained availability (denial-of-service) impact with no confidentiality or integrity loss (VA:H under CVSS 4.0; A:H under CVSS 3.1).
Affected software
- vllm-project/vllm: all versions from the start of the project through 0.29.0 (inclusive), when deployed in disaggregated prefill/decode mode using the NIXL KV connector.
Severity
- CVSS v3.1 Base Score: 7.5 (HIGH) —
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - CVSS v4.0 Base Score: 8.7 (HIGH) —
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness: CWE-401 (Missing Release of Memory after Effective Lifetime)
Mitigation and recommended actions
- Immediate: Upgrade vLLM to a version containing the fix in PR #55677, which ensures empty-receive metadata with no local blocks is no longer persisted in the push worker’s tracking state, and that the pull worker drops metadata for empty-block notifications unless a real transfer was already registered.
- If immediate patching is not possible:
- Monitor decode-worker memory consumption in disaggregated NIXL deployments and set up alerting/auto-restart on abnormal growth.
- Rate-limit or filter inbound requests that specify
max_tokens=0, or reject such requests at a reverse proxy/gateway in front of the inference API. - Where feasible, temporarily avoid disaggregated (prefill/decode-split) NIXL deployment mode until patched, using standard (non-disaggregated) serving instead.
- Restrict inference API access to trusted networks/clients to reduce exposure to unauthenticated abuse.

