Safeguard
Vulnerability Analysis•

LiteLLM CVE-2026-30623: adding an MCP server could run any command

NVD published CVE-2026-30623 on 15 July 2026. LiteLLM's MCP stdio transport ran any command it was given. Upgrade to v1.83.7-stable and allowlist launchers.

Safeguard Security Team
4 min read

NVD published CVE-2026-30623 on 15 July 2026. It describes remote code execution in LiteLLM's MCP server creation feature: a user supplies a JSON config with a command and args, and LiteLLM runs them on the host without validation. The flaw was first reported by OX Security on 15 April as part of its research on command injection in the stdio transport of Anthropic's MCP SDK, and LiteLLM published its response on 21 April.

Two accounts differ on one point that matters for triage. The NVD record scores it 9.8 and describes it as exploitable remotely without privileges. LiteLLM says the affected endpoints sit behind authentication, so an attacker needed a valid API key.

What's affected

LiteLLM proxy deployments that expose MCP server management. NVD names version 1.18.10. The vendor's fix history is on the 1.83.x line: the fix landed in v1.83.6-nightly and is in v1.83.7-stable and every later release.

The vulnerable surfaces, per LiteLLM:

  • MCP server creation and update requests
  • The preview endpoints /mcp-rest/test/connection and /mcp-rest/test/tools/list
  • Servers reloaded from config files or the database at runtime

With transport: stdio, the command value went straight into the SDK's stdio parameters and ran as a subprocess of the proxy. An authenticated user who could create MCP servers could therefore run OS commands as the LiteLLM process.

How to check if you're exposed

pip show litellm | grep -i '^version'
docker image ls | grep -i litellm

Look for stdio MCP entries in your config and database:

grep -rn -B2 -A4 "stdio" config.yaml

Any entry whose command is not a launcher you recognize deserves attention. Check your key inventory too: list which API keys can reach the MCP management routes, since older versions did not require the admin role there.

What to do now

  1. Upgrade to v1.83.7-stable or later. Nightly users need v1.83.6-nightly or later.
  2. After upgrading, review existing stdio MCP servers. The fix adds a command allowlist (npx, uvx, python, python3, node, docker, deno), and entries using other commands will fail to start.
  3. If you need another binary, add it with the LITELLM_MCP_STDIO_EXTRA_COMMANDS environment variable, comma separated. Add only what you must.
  4. Review who holds PROXY_ADMIN. After the patch, creating MCP servers and using the preview endpoints require that role, and non-admins now get HTTP 403.
  5. If any key you do not fully trust could reach these routes before the upgrade, rotate it and the provider credentials the proxy holds.

How this could have been avoided

  • Validate the command, not just the shape. The config was accepted as long as it was valid JSON. An allowlist of launchers, which the fix introduced, would have been the first line.
  • Re-check at spawn time. The fix revalidates at _create_mcp_client, so entries saved earlier cannot slip through from the database or config.
  • Reserve server creation for admins. Registering an MCP server is closer to installing software than to calling an API. Tying it to an admin role keeps ordinary keys away.
  • Keep the proxy's own credentials narrow. A subprocess inherits the proxy's environment, including provider keys, so scoping and rotating those keys reduces what a command can take.

Why it matters

Adding an MCP server over stdio means executing a program. Any product that accepts a command line from a user interface has to treat that field as code. OX Security framed its advisory around the stdio transport in Anthropic's MCP SDK, so the same question applies to any product built on it.

The authentication disagreement is also a lesson. Databases that copy NVD show "no privileges required", the vendor says a key was needed, and both can be partly right for different deployments. When your gateway sits on a shared network with many keys, "authenticated" is a weak guarantee.

Try it yourself

Run grep against your own gateway config for stdio. For each server, write down the exact binary it launches and who approved it. Then compare with the demo below, which walks through setting up an MCP server with controls around it.

Click through it at your own pace, or open it full screen.

Quick check

Which LiteLLM stable release first contains the fix?

v1.83.7-stable. The first nightly with the fix is v1.83.6-nightly.

Which environment variable extends the stdio command allowlist?

LITELLM_MCP_STDIO_EXTRA_COMMANDS, a comma separated list of extra binaries.

Sources

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.