CVE-2026-48746
vLLM: OpenAI auth bypass
vLLM is an inference and serving engine for large language models (LLMs). From 0.3.0 until 0.22.0, a vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware. It allows to use the API without providing the configured VLLM_API_KEY or --api-key. This vulnerability is fixed in 0.22.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.1
vLLM: OpenAI auth bypass
vLLM is an inference and serving engine for large language models (LLMs). From 0.3.0 until 0.22.0, a vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware. It allows to use the API without providing the configured VLLM_API_KEY or --api-key. This vulnerability is fixed in 0.22.0.
- Record
CVE-2026-48746- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Weakness
- CWE-444, CWE-501
- Updated
- 2026-11-02
EUVDEUVD-2026-38401
9.1
vLLM is an inference and serving engine for large language models (LLMs). From 0.3.0 until 0.22.0, a vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware. It allows to use the API without providing the configured VLLM_API_KEY or --api-key. This vulnerability is fixed in 0.22.0.
- Record
EUVD-2026-38401- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-94f4-hr76-p5j6
9.1
vLLM: OpenAI auth bypass
Summary
A vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware, which was discovered during @x41sec's source code audit.
It allows to use the API without providing the configured VLLM_API_KEY or --api-key.
Details
In https://github.com/vllm-project/vllm/blob/v0.14.0/vllm/entrypoints/openai/api_server.py#L689-L692 the url_path is taken from the URL, which is reconstructed by starlette based on the request scope.
from starlette.datastructures import URL, Headers, MutableHeaders, State
# ...
url_path = URL(scope=scope).path.removeprefix(root_path)
headers = Headers(scope=scope)
if url_path.startswith("/v1") and not self.verify_token(headers):
response = JSONResponse(content={"error": "Unauthorized"}, status_code=401)
return response(scope, receive, send)
return self.app(scope, receive, send)
The request scope includes the request's Host: header and reconstructs the URL as shown below:
f"{scheme}://{host_header}{path}"
Neither starlette nor any of the ASGI servers (including uvicorn, which vllm uses) properly filter the Host: header for invalid characters. This allows an attacker to include special URL characters such as / or ? in the Host: header and thereby control the reconstructed URL and it's .path attribute.
FastAPI/starlette's routing uses the HTTP path and does not depend on the parsed url.path attribute, allowing attackers to reach an endpoint via a certain path while providing a different value in the .path.
Impact
- Instances of vllm that use an API Key for the OpenAI API and expose the API to attackers.
- Instances behind an RFC-conforming web server (such as nginx) are not affected.
- Record
GHSA-94f4-hr76-p5j6- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Weakness
- CWE-444, CWE-501
- Updated
- 2026-11-02
NVD
9.1
vLLM is an inference and serving engine for large language models (LLMs). From 0.3.0 until 0.22.0, a vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware. It allows to use the API without providing the configured VLLM_API_KEY or --api-key. This vulnerability is fixed in 0.22.0.
- Record
CVE-2026-48746- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Weakness
- CWE-444, CWE-501
- Updated
- 2026-11-02
OSV
9.1
vLLM: OpenAI auth bypass
vLLM is an inference and serving engine for large language models (LLMs). From 0.3.0 until 0.22.0, a vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware. It allows to use the API without providing the configured VLLM_API_KEY or --api-key. This vulnerability is fixed in 0.22.0.
- Record
CVE-2026-48746- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Weakness
- CWE-444
- Updated
- 2026-11-02
OSVGHSA-94f4-hr76-p5j6
9.1
vLLM: OpenAI auth bypass
Summary
A vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware, which was discovered during @x41sec's source code audit.
It allows to use the API without providing the configured VLLM_API_KEY or --api-key.
Details
In https://github.com/vllm-project/vllm/blob/v0.14.0/vllm/entrypoints/openai/api_server.py#L689-L692 the url_path is taken from the URL, which is reconstructed by starlette based on the request scope.
from starlette.datastructures import URL, Headers, MutableHeaders, State
# ...
url_path = URL(scope=scope).path.removeprefix(root_path)
headers = Headers(scope=scope)
if url_path.startswith("/v1") and not self.verify_token(headers):
response = JSONResponse(content={"error": "Unauthorized"}, status_code=401)
return response(scope, receive, send)
return self.app(scope, receive, send)
The request scope includes the request's Host: header and reconstructs the URL as shown below:
f"{scheme}://{host_header}{path}"
Neither starlette nor any of the ASGI servers (including uvicorn, which vllm uses) properly filter the Host: header for invalid characters. This allows an attacker to include special URL characters such as / or ? in the Host: header and thereby control the reconstructed URL and it's .path attribute.
FastAPI/starlette's routing uses the HTTP path and does not depend on the parsed url.path attribute, allowing attackers to reach an endpoint via a certain path while providing a different value in the .path.
Impact
- Instances of vllm that use an API Key for the OpenAI API and expose the API to attackers.
- Instances behind an RFC-conforming web server (such as nginx) are not affected.
- Record
GHSA-94f4-hr76-p5j6- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Weakness
- CWE-444, CWE-501
- Updated
- 2026-11-02
OSVPYSEC-2026-226
9.1
vLLM is an inference and serving engine for large language models (LLMs). From 0.3.0 until 0.22.0, a vulnerability in ASGI web servers and starlette's trust on those web servers enables an authentication bypass of the OpenAI API AuthenticationMiddleware. It allows to use the API without providing the configured VLLM_API_KEY or --api-key. This vulnerability is fixed in 0.22.0.
- Record
PYSEC-2026-226- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
Affected products
- vllm
- vllm-project vllm
- red hat exploit intelligence
- red hat openshift lightspeed
- red hat ai inference server
- red hat ai inference server 3.2
- red hat ai inference server 3.3
- red hat ansible automation platform 2
- red hat ansible automation platform 2.6
- red hat ansible automation platform 2.7
- red hat enterprise linux ai (rhel ai) 3
- red hat hardened images
Affected packages
| Package | Affected | Fixed |
|---|---|---|
vllmPyPI |
0.3.0 up to 0.22.0 | 0.22.0 |
vllmPyPI |
0.3.0 up to 0.22.0, plus listed versions 0.10.00.10.10.10.1.10.10.20.11.0 Show 45 moreShow less0.11.10.11.20.12.00.13.00.14.00.14.10.15.00.15.10.16.00.17.00.17.10.18.00.18.10.19.00.19.10.20.00.20.10.20.20.21.00.3.10.3.20.3.30.4.00.4.0.post10.4.10.4.20.4.30.5.00.5.0.post10.5.10.5.20.5.30.5.3.post10.5.40.5.50.6.00.6.10.6.1.post10.6.1.post20.6.20.6.30.6.3.post10.6.40.6.4.post10.6.5 |
0.22.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-48746 is a critical vulnerability (CVSS 9.1) in Vllm, published June 16, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.15%, the 67th percentile. Fixed in vllm 0.22.0.
References
github.com/vllm-project/vllm/security/advisories/GHSA-94f4-hr76-p5j6
github.com/vllm-project/vllm/pull/43426
x41-dsec.de/lab/advisories/x41-2026-002-starlette
access.redhat.com/security/cve/CVE-2026-48746
bugzilla.redhat.com/show_bug.cgi?id=2491581
security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-48746.json
Show 15 moreShow less
access.redhat.com/errata/RHSA-2026:61627
access.redhat.com/errata/RHSA-2026:36005
access.redhat.com/errata/RHSA-2026:61629
access.redhat.com/errata/RHSA-2026:36006
access.redhat.com/errata/RHSA-2026:30089
access.redhat.com/errata/RHSA-2026:30088
access.redhat.com/errata/RHSA-2026:42132
access.redhat.com/errata/RHSA-2026:42142
access.redhat.com/errata/RHSA-2026:43038
access.redhat.com/errata/RHSA-2026:42644
nvd.nist.gov/vuln/detail/CVE-2026-48746
github.com/pypa/advisory-database/tree/main/vulns/vllm/PYSEC-2026-226.yaml
github.com/advisories/GHSA-94f4-hr76-p5j6
github.com/CVEProject/cvelistV5/tree/main/cves/2026/48xxx/CVE-2026-48746.json
github.com/vllm-project/vllm
Left out here: 17 versions. The JSON record has them.