Skip to main content

vLLM EUVDEUVD-2026-83284

| CVE-2026-93840 MEDIUM
Improper Validation of Array Index (CWE-129)
2026-09-18 VulnCheck GHSA-97fp-7cr2-23qc
6.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach multi-tenant vLLM API
  2. Delivery
    Submit request with out-of-vocab allowed_token_ids
  3. Exploit
    Pass tokenizer-length validation
  4. Execution
    Corrupt shared GPU LogitBiasState
  5. Impact
    Concurrent requests sample tokens outside allowlists

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Array index validation
Exploitation Conditions

Exploitation requires a running vLLM instance (before 0.29.0) serving a model where the tokenizer vocabulary is larger than the model's output logits width - the diff explicitly cites the multimodal case of tokenizer length 128257 vs model output vocab 128256, so the flaw is inert on models where the two sizes are equal. The attacker must submit a request with SamplingParams.allowed_token_ids containing an ID in that gap (>= model_vocab_size) via the inference API. Realized cross-request impact further requires concurrent victim requests executing in the same GPU sampling batch (reflected as AT:P). Limiting factors: the corruption only affects token-sampling constraints (integrity, VI:L; no data theft or crash), the bug is most impactful in shared/multi-tenant deployments, and it does not apply to single-tenant setups or models without a tokenizer/output-vocab mismatch. Authentication requirements are not enforced by the CVSS vector (PR:N), consistent with vLLM's default OpenAI-compatible server exposing endpoints without auth.

Impact

This is a moderate-severity integrity issue, not a top priority. The vendor CVSS 4.0 vector (6.3, AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N) correctly frames it as a network-reachable, unauthenticated flaw whose ONLY impact is low integrity (VI:L) - no confidentiality (VC:N) and no availability (VA:N) loss. The AT:P (attack requirement 'present') flag is the key signal: successful exploitation depends on a race condition against concurrent victim requests sharing the same GPU batch, which meaningfully limits reliability. No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no public exploit identified at time of analysis. CONFLICT/NOTE: the input Tags label this 'Information Disclosure,' but the description and CWE-129 (improper validation of array index) describe cross-request LOGITS CORRUPTION causing tokens to be sampled outside their allowlists - that is an integrity/output-manipulation problem, not disclosure; the vendor's own VC:N (no confidentiality impact) confirms the tag is misleading. A secondary data note: the referenced patch diff is Rust code (rust/src/text/lower/token_ids.rs) while the description cites the Python SamplingParams._validate_allowed_token_ids() path - both reflect the same fix (validating against model_vocab_size rather than tokenizer_vocab_size). Overall a real but bounded defect affecting multi-tenant vLLM deployments; patch to 0.29.0 as routine hardening rather than emergency.

Exploit ScenarioDerived

An attacker with access to a shared/multi-tenant vLLM inference endpoint submits a completion request whose SamplingParams.allowed_token_ids includes a token ID that is valid in the tokenizer but beyond the model's output logits width (e.g., ID 128256 on a model whose output vocab is 128256 but tokenizer is 128257). The out-of-range index passes validation and corrupts the shared LogitBiasState on the GPU, causing other users' concurrent requests to sample tokens outside their own allowlists. No public POC is provided, and success depends on timing against concurrent requests (AT:P).

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 18, 2026

Sampling-parameter validation in vLLM before 0.29.0 checks the allowed_token_ids allowlist against the tokenizer vocabulary size instead of the model's output logits width, so a remote client calling the OpenAI-compatible inference API can supply token IDs that are valid for the tokenizer but out of range for the model output (the advisory's cited case is a multimodal model with 128257 tokenizer tokens versus 128256 output logits). Those out-of-range IDs pass validation and reach the GPU sampling path, where LogitBiasState's Triton logit-bias kernel indexes past the valid logits row and corrupts shared GPU logits state, causing concurrent victim requests in the same batch to sample tokens outside their own allowlists. The impact is limited to sampling-constraint integrity (no data disclosure, crash, or code execution) in shared or multi-tenant deployments, and it is inert on models whose tokenizer and output vocabularies are the same size; there is no public exploit identified at time of analysis and no confirmed active exploitation (not listed in CISA KEV).

RemediationAI

Upgrade to vLLM 0.29.0 or later, which is the vendor-released fixed version per the advisory; the code change is carried by pull request https://github.com/vllm-project/vllm/pull/49080 and commit https://github.com/vllm-project/vllm/commit/5b0e5b69ac1a3884a6479c9537789c95263cc804, and the vulnerability is tracked as GHSA-wr27-mx79-rg6c with additional detail in the VulnCheck advisory at https://www.vulncheck.com/advisories/vllm-before-0.29.0-cross-request-logits-corruption-via-allowed-token-ids. Until the upgrade can be scheduled, the most effective compensating control is to keep vLLM instances in trusted single-tenant deployments or to run separate GPU processes per tenant so that concurrent requests never share a sampling batch, which removes the cross-request consequence at the cost of higher GPU memory and lower batch efficiency. Because the exposed endpoint is the inference API itself, front it with an authenticating reverse proxy and restrict it to trusted networks rather than relying on vLLM's default unauthenticated OpenAI-compatible server; this does not fix the bug but raises the bar for reaching it. If the application does not need per-request token allowlisting, reject or strip requests that include allowed_token_ids at the gateway, accepting the loss of that constraint feature for legitimate callers; alternatively, validate allowed_token_ids at the gateway against the deployed model's output vocabulary (not its tokenizer vocabulary), which requires maintaining a per-model vocabulary map and rejecting IDs greater than or equal to model output vocab size. Deployments serving models whose tokenizer and output vocabularies are identical are not exposed and can be deprioritized. Patch status per vendor data: Vendor-released patch, vLLM 0.29.0.

Affected VersionsENISA

vllm 0 <0.29.0

Affected Packages

pypi vllm fix: 0.29.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is an instance of CWE-129 (Improper Validation of Array Index) inside vLLM's request-validation layer. SamplingParams._validate_allowed_token_ids() in v0.28.0 compared user-supplied token IDs to the tokenizer length, but the sampler operates on the model's output logits tensor, whose width can be smaller than the tokenizer vocabulary - a common configuration for multimodal and vision-language models, where the tokenizer carries extra special/placeholder tokens that the language-model head never emits. When an ID falls in that gap (>= model output vocab size), the bounds check passes, the ID propagates to LogitBiasState and the Triton _bias_kernel in vllm/v1/worker/gpu/sample/logit_bias.py, and the kernel's mask computation no longer guarantees that loads/stores stay inside the row. Because vLLM batches many concurrent requests into a single GPU sampling step, an out-of-range store writes across row boundaries and alters the logits of neighbouring requests, which then sample tokens that their own allowlists exclude. The upstream fix (PR #49080, commit 5b0e5b69ac1a3884a6479c9537789c95263cc804) changes the Rust validator in rust/src/text/src/lower/token_ids.rs from limits.tokenizer_vocab_size to limits.model_vocab_size, so allowed_token_ids is validated against the model output vocabulary, and it adds regression tests that reject IDs equal to or greater than the model vocab size, negative IDs, mixed valid/invalid lists, and empty lists, plus a GPU test asserting that an out-of-range ID cannot corrupt an adjacent row through the Triton bias kernel (GHSA-wr27-mx79-rg6c).

Know when Vllm 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

Vendor (VulnCheck) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 3.7 LOW

Network-reachable, unauthenticated API (AV:N/PR:N), but reliant on a race with concurrent requests and a specific vocab-mismatch model (AC:H); impact is bounded output-sampling corruption (I:L only).

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
SUSE MEDIUM
Red Hat 4.8 MEDIUM

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

vLLM before 0.29.0 validates allowed_token_ids against tokenizer length instead of model output logits width in SamplingParams._validate_allowed_token_ids(). Attackers can supply token IDs above the output vocabulary that pass validation, causing LogitBiasState to corrupt GPU logits state and allow concurrent requests to sample tokens outside their allowlists.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 1 pypi packages depend on vllm (1 direct, 0 indirect)

Ecosystem-wide dependent count for version 0.29.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 84% exploitable
Prevalence
Medium
vLLM is a popular LLM inference/serving framework but not universally deployed
Data Quality
7 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment Vendor GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Vllm

View all
CVE-2025-32444 CRITICAL POC
10.0 Apr 30

vLLM is a high-throughput and memory-efficient inference and serving engine for LLMs. Rated critical severity (CVSS 10.0

CVE-2024-11041 CRITICAL POC
9.8 Mar 20

vllm-project vllm version v0.6.2 contains a vulnerability in the MessageQueue.dequeue() API function. Rated critical sev

CVE-2026-22778 CRITICAL POC
9.8 Feb 02

Information exposure in vLLM inference engine versions 0.8.3 to before 0.14.1. Invalid image requests to the multimodal

CVE-2025-30202 HIGH POC
7.5 Apr 30

vLLM is a high-throughput and memory-efficient inference and serving engine for LLMs. Rated high severity (CVSS 7.5), th

CVE-2026-24779 HIGH POC
7.1 Jan 27

vLLM before version 0.14.1 contains a server-side request forgery vulnerability in the MediaConnector class where incons

CVE-2026-57173 MEDIUM POC
6.5 Sep 16

Out-of-memory worker crashes in vLLM can be induced by a single small compressed audio payload submitted to the /v1/chat

CVE-2025-46560 MEDIUM POC
6.5 Apr 30

vLLM is a high-throughput and memory-efficient inference and serving engine for LLMs. Rated medium severity (CVSS 6.5),

CVE-2026-69147 MEDIUM POC
6.5 Sep 16

GPU memory exhaustion in vLLM versions prior to 0.28.0 lets an attacker with low-privileged API access (PR:L in the CVSS

CVE-2026-105753 MEDIUM POC
6.5 Oct 05

Multimodal inference requests to vLLM deployments running versions prior to 0.28.0 can trigger a process-level assertion

CVE-2026-73559 MEDIUM POC
6.5 Aug 13

Uncontrolled resource consumption in vLLM's OpenAI-compatible completions endpoint allows any authenticated API client t

CVE-2026-22773 MEDIUM POC
6.5 Jan 10

Vllm versions up to 0.12.0 is affected by allocation of resources without limits or throttling (CVSS 6.5).

CVE-2026-73557 MEDIUM POC
6.3 Aug 13

Race condition in vLLM's prompt embedding loader allows concurrent API requests to bypass the sparse tensor invariant gu

Vendor StatusVendor

SUSE

Severity: Moderate

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy