Skip to content
Heist/ feed
Back to feed
Medium

vLLM before 0.29.0 Cross-Request Logits Corruption via allowed_token_ids

Type: advisorySources: OSV

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.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-93840
Confirmed fixed CVEs
Not specified
Updated in this feed
5 Nov 2026, 11:24 UTC · Revision 1

Source evidence

vLLM before 0.29.0 Cross-Request Logits Corruption via allowed_token_ids

core-osv · Original source

Published 18 Sept 2026, 19:06 UTC

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.

osv:CVE-2026-93840
Complete source record
{
  "id": "18f55b4666dea2c1b799796863b2f7cb873d5b6af5285727a5c07a115c6b2fa5",
  "url": "https://osv.dev/vulnerability/CVE-2026-93840",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "vLLM before 0.29.0 Cross-Request Logits Corruption via allowed_token_ids",
    "summary": "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.",
    "evidence": "osv:CVE-2026-93840",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-93840",
      "aliases": [
        "CVE-2026-93840",
        "PYSEC-2026-3998"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "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"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/vllm-project/vllm",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "98dff2a81d747d1dba01a47f939f48c3526d4206"
                },
                {
                  "fixed": "5b0e5b69ac1a3884a6479c9537789c95263cc804"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:vllm:vllm:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "0.29.0"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "5b0e5b69ac1a3884a6479c9537789c95263cc804"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v0.28.1rc0",
            "v0.27.2rc0",
            "v0.26.1rc0",
            "v0.25.0",
            "v0.23.1rc0",
            "v0.22.1rc0",
            "v0.21.1rc0",
            "v0.20.2rc0",
            "v0.20.1rc0",
            "v0.19.2rc0",
            "v0.19.1rc0",
            "v0.18.2rc0",
            "v0.18.1rc0",
            "v0.17.2rc0",
            "v0.18.0rc0",
            "v0.17.1rc0",
            "v0.17.0rc0",
            "v0.16.0rc1",
            "v0.15.2rc0",
            "v0.16.0rc0",
            "v0.15.0rc1",
            "v0.14.0rc1",
            "v0.14.0rc0",
            "v0.13.0rc1",
            "v0.11.1",
            "v0.11.1rc6",
            "v0.11.1rc5",
            "v0.11.1rc4",
            "v0.11.1rc3",
            "v0.11.1rc2",
            "v0.11.1rc1",
            "v0.11.1rc0",
            "v0.11.0rc1",
            "v0.10.2rc2",
            "v0.10.2rc1",
            "v0.10.1rc1",
            "v0.10.0rc2",
            "v0.10.0",
            "v0.10.0rc1",
            "v0.9.2rc1",
            "v0.9.1rc2",
            "v0.9.1",
            "v0.9.1rc1",
            "v0.9.0",
            "v0.8.4",
            "v0.8.3rc1",
            "v0.8.2",
            "v0.8.1",
            "v0.8.0rc2",
            "v0.8.0rc1",
            "v0.7.3",
            "v0.7.2",
            "v0.7.1",
            "v0.7.0",
            "v0.6.6.post1",
            "v0.6.6",
            "v0.6.5",
            "v0.6.4.post1",
            "v0.6.4",
            "v0.6.3.post1",
            "v0.6.3",
            "v0.6.2",
            "v0.6.1.post2",
            "v0.6.1.post1",
            "v0.6.1",
            "v0.6.0",
            "v0.5.5",
            "v0.5.4",
            "v0.5.3.post1",
            "v0.5.3",
            "v0.5.2",
            "v0.5.1",
            "v0.5.0.post1",
            "v0.5.0",
            "v0.4.3",
            "v0.4.2",
            "v0.4.1",
            "v0.4.0.post1",
            "v0.4.0",
            "v0.3.3",
            "v0.3.2",
            "v0.3.1",
            "v0.3.0",
            "v0.2.7",
            "v0.2.6",
            "v0.2.5",
            "v0.2.4",
            "v0.2.3",
            "v0.2.2",
            "v0.2.1",
            "v0.2.0",
            "v0.1.7",
            "v0.1.6",
            "v0.1.5",
            "v0.1.4",
            "v0.1.3",
            "v0.1.2",
            "v0.1.1",
            "v0.1.0",
            "submission"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-93840.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:44.007326365Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/93xxx/CVE-2026-93840.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-93840",
        "https://www.vulncheck.com/advisories/vllm-before-0.29.0-cross-request-logits-corruption-via-allowed-token-ids",
        "https://github.com/vllm-project/vllm/commit/5b0e5b69ac1a3884a6479c9537789c95263cc804",
        "https://github.com/vllm-project/vllm/pull/49080",
        "https://github.com/vllm-project/vllm",
        "https://github.com/vllm-project/vllm/blob/v0.28.0/vllm/sampling_params.py#L881-L903",
        "https://github.com/vllm-project/vllm/blob/v0.28.0/vllm/v1/worker/gpu/sample/logit_bias.py#L179-L191"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-129"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/93xxx/CVE-2026-93840.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-93840",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 511718,
  "published_at": "2026-09-18T19:06:06.001+00:00"
}