
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-54234 is a remote Denial of Service vulnerability in vLLM (a high-throughput LLM inference engine) caused by invalid recovered token reinjection during speculative decoding. A frontend-legal multi-request speculative decoding workload can cause the rejection sampler to produce a recovered token equal to the model vocabulary size boundary value (vocab_size), which is then converted to -1 and fed back into the drafter's input IDs, ultimately crashing the GPU engine worker. All vLLM versions from 0.17.1 up to (but not including) 0.24.0 are affected. The vulnerability was published on July 6, 2026, with a fix merged on June 10, 2026, and carries a CVSS v3.1 base score of 7.5 (High) (GitHub Advisory, Github Advisory).
The root cause is a speculative-decoding state-handling bug classified as CWE-20 (Improper Input Validation), CWE-1284 (Improper Validation of Specified Quantity in Input), and CWE-125 (Out-of-bounds Read). When vocab_size is not a multiple of the Triton kernel's BLOCK_SIZE (8192), the last tile in sample_recovered_tokens_kernel extends beyond the vocabulary boundary; if all valid entries in that tail tile have zero target probability, the out-of-range masked positions (score 0) can win the tl.max tie-break, producing recovered_id >= vocab_size. This out-of-vocabulary value is then selected as the live next token for a request, converted to -1, written back into the drafter's input IDs via set_inputs_first_pass, and subsequently consumed by the model's embedding and attention path (embed_tokens), triggering a CUDA error: device-side assert triggered that kills the engine worker. The triggering request sequence uses only standard SamplingParams features (structured outputs, stop, bad_words, min_tokens, streaming overlap) and is reachable through the public gRPC Generate and Abort endpoints without any malformed token input (GitHub Advisory, Fix PR).
Successful exploitation causes a complete, service-wide denial of service: the shared vLLM engine worker crashes, aborting all concurrent requests from all clients until the worker is manually restarted. Because the failure is reproducible and requires no authentication or special privileges, an attacker can sustain the outage by repeatedly sending the triggering request sequence. There is no confidentiality or integrity impact — the vulnerability is purely an availability issue affecting all users of a shared vLLM deployment (GitHub Advisory, Red Hat Bugzilla).
Proof-of-concept exploit code is publicly available in the form of two standalone Python scripts (repro_g4_recovered_minus1_local.py and repro_g4_recovered_minus1_grpc.py) included in the security advisory, confirmed to reliably reproduce the crash on real vLLM deployments (GitHub Advisory). The NVD SSVC assessment classifies the vulnerability as automatable with PoC-level exploitation. No in-the-wild exploitation has been reported as of the time of publication, and the vulnerability is not listed in the CISA KEV catalog. The EPSS score is approximately 0.34%, placing it in the 27th percentile for exploitation likelihood (Github Advisory).
repro_g4_recovered_minus1_grpc.py. Configure it with the target vLLM gRPC server address and the appropriate model path via the VLLM_POC_G4_MODEL environment variable.Generate and Abort gRPC RPCs designed to keep structured-output state, speculative decoding, overlap, and request cancellation simultaneously active in the live engine.sample_recovered_tokens_kernel to produce recovered_token_ids[0] = vocab_size (e.g., 151936), which is then converted to -1 and written into the drafter's live input IDs.-1 token is consumed by the model's embedding path (embed_tokens), triggering CUDA error: device-side assert triggered and a fatal EngineDeadError, crashing the shared worker and aborting all concurrent requests.Generate probe request to confirm the worker is dead (it will fail with EngineCore encountered an issue). Repeat the sequence to sustain the outage until the worker is restarted (GitHub Advisory).torch.AcceleratorError: CUDA error: device-side assert triggered appearing in server.stderr.logvllm.v1.engine.exceptions.EngineDeadError: EngineCore encountered an issue. See stack trace (above) for the root cause.INTERNAL: EngineCore encountered an issue. returned to gRPC clientsError in Generate for request <id>: EngineDeadError for requests submitted after the crashsample_recovered_tokens_return: recovered_token_ids = [151936, ...] (or any value equal to vocab_size)prepare_next_token_ids_padded: next_token_ids = [-1, ...]set_inputs_first_pass: input_ids_after = [-1, 0, 0, 0, ...]embed_input_ids_out_of_range: input_ids = [-1, 0, 0, 0, ...]Generate and Abort RPC calls from a single client to the vLLM gRPC endpoint, followed by a sudden drop in successful responses from all clientsThe primary remediation is to upgrade vLLM to version 0.24.0 or later, which contains the fix merged in PR #44744 (commit 8a5cf1c). The fix masks out-of-vocabulary entries to -inf in sample_recovered_tokens_kernel so they can never win the tiled argmax, and adds a belt-and-suspenders clamp on recovered_id before storing. If immediate patching is not possible, implement network-level access controls to restrict which clients can send requests to the vLLM gRPC endpoints, or deploy redundant vLLM workers with automatic failover to minimize service disruption from worker crashes (Fix PR, GitHub Advisory).
The vulnerability was reported by security researcher NeilAlfred and coordinated by jperezdealgaba, who also authored the fix. The fix was reviewed and approved by vLLM maintainer MatthewBonanni and merged on June 10, 2026. Red Hat tracked the issue via Bugzilla (Bug 2497515) with high priority and severity. The advisory received attention on Mastodon shortly after disclosure. Multiple downstream forks and distributions (including NixOS and several community vLLM forks) promptly cherry-picked the security fix (Red Hat Bugzilla, Fix PR).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."