CVE-2026-115917 is a low-severity (CVSS 3.4) CWE-942 vulnerability in vllm. A fix is available for vllm — see the affected versions and patch details below.
vLLM: Permissive default CORS origins allow cross-origin requests to the vLLM HTTP server
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
How urgent is this, really
CVE-2026-115917 by exploitation likelihood (EPSS) against impact (CVSS). Outside the shaded patch-first corner.
Where this sits among everything scored
Of 396,966 CVEs with a current EPSS score, this one falls in the < 10% band (highlighted). Counts from FIRST.org, log-scaled.
Real-World Exposure
vllmReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects PyPI packages — download data is not available via public APIs for these ecosystems.
Description
Summary
The OpenAI-compatible server registers Starlette CORSMiddleware with
allowed_origins defaulting to ["*"], and performs no authentication unless
--api-key (or VLLM_API_KEY) is configured. A web page on any origin can send
requests to a vLLM server that the victim's browser can reach (for example
localhost or an internal/VPN address) and read the responses. The default
allow_credentials=False blocks cookie-bearing cross-origin requests; because
vLLM authenticates with a bearer header rather than cookies, the wildcard still
permits untokenized access to an unauthenticated server and read access when the
caller already holds a token.
Details
Affected components
vllm/entrypoints/launchers/cli_args.py-allowed_originsdefault value.vllm/entrypoints/serve/middleware/register.py-CORSMiddlewareregistration.vllm/entrypoints/serve/middleware/authenticate.py- auth middleware and its guarded path prefixes.
Root cause
vllm/entrypoints/launchers/cli_args.py:
allow_credentials: bool = False
"""Allow credentials."""
allowed_origins: list[str] = field(default_factory=lambda: ["*"])
"""Allowed origins."""
vllm/entrypoints/serve/middleware/register.py:
app.add_middleware(
CORSMiddleware,
allow_origins=args.allowed_origins,
allow_credentials=args.allow_credentials,
allow_methods=args.allowed_methods,
allow_headers=args.allowed_headers,
)
The auth middleware is added only when a token is configured and guards only the
/v1, /v2, /inference, and /cohere prefixes. /v1/load_lora_adapter and
/v1/unload_lora_adapter are inside /v1 and therefore do require a key when
one is set; they are open only when no key is configured and dynamic LoRA
updating is enabled.
Impact
- A malicious page can enumerate models (
GET /v1/models), issuePOST /v1/chat/completions, consume GPU time, and read model output through the victim's browser. - When the server is reachable only from the victim's network, the browser acts as a proxy a remote website could not otherwise use.
- With
allow_credentials=False, cookie-based CSRF does not apply; the exposure is cross-origin request execution and response disclosure.
This advisory was fixed in MR61009.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐍PyPI | vllm | all versions | 0.32.0pip install --upgrade 'vllm==0.32.0' |
Affected Products
vllmvllmDetection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for vllm, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update vllm to 0.32.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-115917 is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
Frequently Asked Questions
Is CVE-2026-115917 in your dependencies?
Find it across PyPI, including transitive dependencies.