CVE-2026-12773: LiteLLM: MCP Proxy Has Improper Authentication
LiteLLM's MCP proxy accepted requests with an invalid `Authorization` header and treated them as an anonymous session. That gave access to any MCP server set to `allow_all_keys: true`. The data lists litellm 1.84.0 as the patched version. A public exploit report exists.
Published Jun 21, 2026 · Updated Sep 10, 2026 · Analysis Oct 25, 2026
What an attacker can do
The report describes process_mcp_request in the MCP proxy calling user_api_key_auth, which raises a 401 or 403 on a bad key. The code caught those errors and carried on with a default UserAPIKeyAuth() object, so the request proceeded as if it were authenticated. get_allowed_mcp_servers then returned every MCP server configured with allow_all_keys: true.
The fix commit shows the same area. Before it, any 401 or 403 became an anonymous session whatever the target server's auth_type. Public-route detection also matched .well-known anywhere in the URL, so an attacker could put the string in a query string or hostname to skip authentication.
The attacker needs network access to the proxy and an MCP server exposed with allow_all_keys: true. A fake Bearer token was enough in the researcher's proof of concept, which got a tools/list reply with HTTP 200. From there they can call the MCP tools behind the proxy. What that means depends on the tools: data access, or commands, if a server exposes them. The researcher claims this could lead to code execution. That claim is theirs, and the sources do not confirm it.
Who is affected
The pip package litellm before 1.84.0 per the advisory data. The NVD-style description and the researcher's report say up to 1.59.8, so the two ranges do not match, and 1.84.0 is the safe target. Exposure needs the MCP gateway in use and at least one MCP server with allow_all_keys: true.
pip show litellmCheck your proxy config for MCP servers and the allow_all_keys setting.
litellm
- Ecosystem
- PyPI
- Affected
- < 1.84.0
- Fixed in
- 1.84.0
- Check
pip show litellm
How to fix it
Upgrade litellm to 1.84.0.
pip install --upgrade litellm==1.84.0The fix commit in the litellm repository does two things in MCPRequestHandler.process_mcp_request. It requires the public path to start with /.well-known/. It also applies the anonymous OAuth2 fallback only when every targeted MCP server uses oauth2; otherwise the auth error is returned. Targets come from the x-mcp-servers header, or from /mcp/{server_name} or /{server_name}/mcp, and unknown routes fail closed. The sources give no workaround. Until you upgrade, remove allow_all_keys: true from MCP servers and keep the proxy off untrusted networks.
How to tell if you were hit
Look in the proxy's access logs for MCP requests (/mcp routes, tools/list, tools/call) that carry an invalid or unknown Bearer token but return 200. Check for .well-known in query strings or hostnames on MCP URLs. Review the MCP servers behind the proxy for tool calls with no matching LiteLLM virtual key.
Original advisory
From the GitHub Advisory Database (CC BY 4.0).
A weakness has been identified in BerriAI litellm up to 1.59.8. Affected is the function UserAPIKeyAuth of the file litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py of the component MCP Proxy. Executing a manipulation can lead to improper authentication. The attack may be launched remotely. The exploit has been made available to the public and could be used for attacks. The vendor was contacted early about this disclosure.
Questions
- Does this need a valid LiteLLM key?
No. The report says an arbitrary invalid Authorization header is enough, as long as the target MCP server has
allow_all_keys: true.- Is a public exploit available?
Yes. The advisory says the exploit was published, and the researcher's report includes a proof of concept. No source says it was used in attacks, and it is not in CISA's KEV catalog.
- Why do the sources disagree on affected versions?
The description says up to 1.59.8, but the advisory data lists everything below 1.84.0 as vulnerable. Use 1.84.0 or later to be safe.
References
Read for this analysis:
- https://gist.github.com/YLChen-007/3cfaad10a69d7a15e4d4d458cb53309e
- https://github.com/BerriAI/litellm/commit/73869f0faf7d11ee21adcb5f91b8c33a340b6c2c
- https://nvd.nist.gov/vuln/detail/CVE-2026-12773
- https://vuldb.com/cve/CVE-2026-12773
- https://vuldb.com/submit/811282
- https://vuldb.com/vuln/372515
- https://vuldb.com/vuln/372515/cti
- https://access.redhat.com/security/cve/CVE-2026-12773
- https://bugzilla.redhat.com/show_bug.cgi?id=2491112
- https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-12773.json
- https://github.com/advisories/GHSA-4jcj-7x88-m979
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. The analysis is written by an AI model from the sources listed above and checked by automated rules before it is published. Check versions against the vendor's advisory before you act. Methodology
More LiteLLM vulnerabilities
All LiteLLM entriesCVE-2026-84377
LiteLLM: Authenticated SSRF and provider-credential exfiltration via unvalidated request-body routing parameters
medium6.5Sep 30, 2026CVE-2026-59823
LiteLLM Proxy has server-side request forgery via the `user_config` request parameter
medium5.3Sep 17, 2026CVE-2026-37004
LiteLLM vulnerable to server-side template injection in the /prompts/test endpoint
critical9.8Aug 27, 2026CVE-2026-59819
LiteLLM: Local file read via request-supplied OIDC file references
low2.1Jul 22, 2026CVE-2026-59820
LiteLLM: Arbitrary file write via path traversal in Skills archive extraction
medium6.1Jul 22, 2026CVE-2026-59821
LiteLLM: Custom Code Guardrails production endpoints bypass code safety checks
low2.1Jul 22, 2026
