← Alle Playbooks
Playbook· security

MCP STDIO security, what the OX Security story means for you

In April 2026 OX Security disclosed a systemic RCE vulnerability in the MCP STDIO transport. 11 CVEs, up to 200K vulnerable instances. Here is what you actually need to do as an operator and as a builder.

On April 15, 2026, OX Security published a blog post that among security researchers is being called the "Mother of all AI Supply Chain Attacks". Six independent sources confirmed the findings, among them The Hacker News, Infosecurity Magazine, SecurityWeek and Tom's Hardware. Anthropic classified the vulnerability as "expected behavior", saying sanitization is the developer's responsibility. That is not a quote with a protective function, that is exactly the point that carries the discussion.

If you are reading this playbook, you have probably heard that MCP servers are insecure, and you want to know whether you have to change something now. The short answer is, as a consumer who installs MCP servers probably nothing dramatic, as a builder of your own MCP server it does matter.

What OX Security found

The MCP STDIO transport is the standard variant in which MCP servers are started locally as a subprocess. Anthropic SDKs in Python, TypeScript, Java and Rust run OS commands on server startup and pass arguments through. OX showed that these arguments in many production server implementations turn directly into shell calls, and that even best-practice-compliant sanitization does not close the gap.

The numbers from the original post: 150 million monthly SDK downloads, 7,000 publicly published MCP servers, an estimated up to 200,000 vulnerable instances. At least 11 CVEs are assigned. The list includes LiteLLM, LangChain-Chatchat, LangFlow (CVE-2026-40933), Flowise, Windsurf (CVE-2026-30615), Bisheng, Upsonic, DocsGPT, Agent Zero, Fay Framework and GPT Researcher. These are frameworks that thousands of builds use, not Reddit hype.

The most important finding is not the list, but the OX follow-up analysis. Even frameworks that explicitly built in sanitization (Flowise CVE-2026-40933, Upsonic CVE-2026-30625) were bypassed. Python and Node allow shell tricks via arguments that are not caught by naive whitelist validation. That is the spot where Anthropic says "expected behavior".

Are you affected, three clear cases

Case 1, you install MCP servers in Claude Desktop or Claude Code. You are a consumer. The risk is low as long as you only install MCP servers that you know yourself or that come from trustworthy sources (official Anthropic releases, established OSS projects, the StudioMeyer Marketplace). It gets really dangerous when you install foreign MCP servers from forks or unknown repos, because a malicious server can run arbitrary commands on your system at startup.

Concrete measures you should take today. Look at your ~/.claude/settings.json and list the installed MCP servers. For each one that does not come from you or an official source, ask yourself whether you really know the provider. When in doubt, uninstall. For every new MCP server that does not come from a trusted source, read the command: line. If it says npx -y irgendwer/mcp-server there, you are downloading foreign code from npm and running it on the next Claude start. That is the same trust question as with npm packages, no more and no less.

Case 2, you build an MCP server for yourself or your team. You are a builder, the risk is medium. If your server does not take arguments from outside, but only offers hard-wired tools with zod-validated input schemas, you are fine. But if you call child_process.exec() or shell=True somewhere from a tool argument string, you have exactly the vulnerability OX found. Mandatory fix, use execFile or spawn with an argument array instead of exec, and validate every argument string against a strict allowlist instead of a blocklist.

Case 3, you publish MCP servers on a marketplace or registry. You are a distributor, the risk is high and it also affects your users. Here it additionally applies: signed releases (npm provenance), clear auth boundaries (no root access to the filesystem without explicit user confirmation), and a documented security statement in the README that describes which arguments your server accepts and how they are validated.

What you can check today, five minutes

If you have your own MCP server, search the code for three patterns.

Search one: calls to child_process.exec() with interpolated arguments. The pattern in TypeScript is usually a template string like some-cli ${userInput} directly in exec(...). Every hit is a potential problem. The solution is execFile("some-cli", [userInput]) with an explicit argument array.

Search two: Python subprocess.run() or subprocess.Popen() with shell=True. The standard recommendation is shell=False and a list instead of a string. If you need shell=True because you use pipes or redirects, escape the user inputs explicitly with shlex.quote().

Search three: tool handlers that take paths and pass them to fs.readFile, fs.writeFile or similar. Mandatory is a path validation against path traversal (.. segments, absolute paths that are not in your allowed base dir, NUL bytes, Windows drive letters). In TypeScript path.resolve() plus a startsWith(allowedBase) check is the standard.

The Anthropic statement and what it really means

In reaction to the OX story Anthropic clarified that STDIO servers have the same security context as the application that starts them, and that sanitization is the responsibility of the server developer. That is technically correct, but unsatisfying if as an end user you install MCP servers from a marketplace and cannot inspect the source code.

The practical consequence, MCP servers today are in the same trust class as npm packages, VSCode extensions or any CLI tools you install. Just because a server is listed in a marketplace does not mean it was audited. Anthropic marketplaces do not do code review, that is not their role. The role that is not filled, someone who checks the servers before listing, could in the medium term be taken on by the large marketplaces or by an independent body. Currently it is not filled.

Practice recommendation for your setup

If you work with MCP today, sort your servers into three categories.

Category one, Anthropic's own servers (filesystem, fetch, sequential-thinking) and your own. Trust level high.

Category two, servers from established OSS projects with an active community and a visible maintainer (memory server from StudioMeyer, GitHub MCP from github/github-mcp-server, sentry, postgres). Trust level medium, read the README, check whether there is a security statement and CI.

Category three, everything else. Trust level low. Do not install without a source code spot check.

If you build your own server, take 30 minutes and go through the three searches above. If you find something, fix it today and test with a deliberately malicious tool argument ("; ls -la" or $(whoami)) whether the server runs it or rejects it. If the server runs it, you have exactly the pattern OX describes.

What is next

If you want to build your first MCP server and want to keep this in mind, the playbook "erster-mcp-server-in-90-minuten" starts at zero and does the sanitization right from the start. If you want to publish, "mcp-server-publishen" covers distribution + trust signals. For DACH compliance aspects (data processing agreements, EU AI Act classification), the playbook "dach-legal-eu-ai-act-und-dsgvo" has a fresh block on MCP security compliance.

Main sources if you want to dig deeper, the original OX post (ox.security/blog/the-mother-of-all-ai-supply-chains), the follow-up analysis on Flowise and Upsonic, plus the CVE entries for CVE-2026-40933 (LangFlow) and CVE-2026-30615 (Windsurf) as concrete reproduction examples.

MCP STDIO security, what the OX Security story means for you — StudioMeyer Academy