PRACTITIONER GUIDE | AI SECURITY
Practitioner Guide13 min read

MCP Tool Poisoning: The SDK Design Flaw Anthropic Won't Fix

An April 2026 disclosure found that unsanitized command execution ships by default in every official MCP SDK, at a scale of 200,000-plus instances and 150 million-plus downloads

200,000+
Estimated vulnerable MCP instances
150M+
Package downloads across the affected supply chain
10+
CVEs issued against downstream tools inheriting the SDK default
9 of 11
MCP registries successfully poisoned in proof-of-concept testing

SponsoredHorizon3.ai

Proactive Security for the AI Era

NodeZero continuously and autonomously pentests infrastructure, identity, cloud, and now web applications, chaining weaknesses across every domain the way real attackers do. Every finding ships with replayable proof showing exploitable business impact, not theoretical risk.

See NodeZero WebApp in action

In April 2026, OX Security disclosed that arbitrary command execution over the Model Context Protocol's STDIO transport is not a bug confined to one careless server, it is default behavior shipped in every official MCP SDK, across Python, TypeScript, Java, and Rust. That distinction matters more than the vulnerability count. A patch fixes one server. A design default replicates itself into every project built on top of the reference implementation, which is why researchers put the exposed footprint at an estimated 200,000-plus vulnerable instances across a supply chain of more than 150 million package downloads.

This piece covers what changed since that disclosure: the scope, the named SDKs and CVEs, what Anthropic and CSA Labs have said on the record, and how this SDK-level default compounds the classic MCP tool poisoning problem covered in our earlier explainers on MCP security risks and MCP server security scanners. If you need the baseline definition of tool poisoning, start there. This article assumes you already have it.

What was actually disclosed

OX Security's research team (Moshe Siman Tov Bustan, Mustafa Naamnih, Nir Zadok, and Roni Bar) spent roughly five months examining how MCP's STDIO transport, the default mechanism an AI agent uses to launch and talk to a local tool process, handles the commands it is given. Their finding, published April 16, 2026 under the title "The Mother of All AI Supply Chains," was that the official MCP SDK lets a connecting client run any arbitrary OS command. If that command successfully starts an STDIO server, the SDK returns a working handle. If it does not, the SDK still executes the command before returning an error. In practice, that means a malicious or manipulated configuration value, something as simple as a poisoned tool description, a compromised marketplace listing, or a hijacked config file, can trigger real command execution on the host, not just influence what the model reads.

The researchers were explicit that this is not a coding mistake anyone patched over five months of disclosure. It is architecture: unsanitized command execution is the documented, intended path, and it sits underneath every project that inherited the reference SDK rather than writing its own transport layer from scratch.

Why an SDK-level default is a different category of problem

Most MCP security stories to date have been about a single misconfigured or malicious server: a trivia-game tool that hides exfiltration instructions in its description, or a marketplace listing that swaps a legitimate tool for a hostile one after installation. Those are real, but they are contained. Fixing them means auditing or removing one bad actor from your environment.

A default baked into the SDK itself is structurally different. Every developer who pulled in the official Python, TypeScript, Java, or Rust MCP package and built a server or client on top of it inherited the same unsanitized command path, whether they knew it or not. That is what turned an individual finding into a supply chain story: the vulnerability does not live in one product's code, it lives upstream in the dependency graph that hundreds of thousands of downstream projects trusted by default. CSA Labs framed this as a systemic design flaw in AI agent infrastructure rather than a conventional CVE-and-patch event, precisely because there is no single patch that closes it across the ecosystem.

Free daily briefing

Briefings like this, every morning before 9am.

Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.

Scope, by the numbers

OX Security's estimates, corroborated across multiple outlets covering the disclosure, put the exposure at:

200,000+ vulnerable instances

Estimated count of deployments running the affected SDK behavior across open source and internal projects.

150 million+ package downloads

Combined download volume across the affected packages in the MCP supply chain, the metric used to describe how deeply the reference SDK has propagated into other software.

7,000+ publicly accessible MCP servers

Internet-reachable servers OX identified during its audit, a subset of the broader estimated exposure.

9 of 11 registries poisoned in proof-of-concept testing

During testing, researchers successfully published malicious listings into 9 of 11 MCP registries they targeted, demonstrating how easily the marketplace layer can be used to distribute the underlying flaw.

Which SDKs and clients were named

The flaw was confirmed in the official MCP SDK implementations for Python, TypeScript, Java, and Rust, meaning it is not limited to one language ecosystem or one vendor's packaging of MCP. OX Security's disclosure led to more than ten individual CVEs being issued against downstream tools and platforms that inherited the behavior, including CVE-2025-65720 (GPT Researcher), CVE-2026-30625 (Upsonic), CVE-2026-30615 (Windsurf), and a GitHub Security Advisory for Flowise, with additional CVEs affecting LangFlow, LiteLLM, and Langchain-Chatchat. Separately, CVE-2026-33032, a CVSS 9.8 flaw in nginx-ui's MCP integration where the message endpoint failed to authenticate command execution requests at all, illustrates how the same class of unsanitized-input problem shows up again once developers build their own integrations on top of the SDK.

AI-assisted development environments and IDEs that support MCP, including Cursor, VS Code, Claude Code, Gemini CLI, GitHub Copilot, and Windsurf, were all named as clients that can be exposed when they connect to a vulnerable or malicious MCP server, since the exploit path runs through the transport layer those clients rely on, not through any one vendor's application code.

What CSA Labs and Anthropic have said

Anthropic's response, as reported by OX Security and independently confirmed in coverage of the disclosure, was to decline modifying the protocol's architecture. The company characterized the unsanitized STDIO command execution as a "secure default" and "expected" behavior, and told researchers that sanitizing untrusted input is the responsibility of the developers building on top of the SDK, not something the protocol itself should enforce. Anthropic did publish updated security guidance following the disclosure, but that guidance does not change the SDK's default behavior; it shifts the burden to every downstream implementer to add sanitization the reference implementation does not provide.

CSA Labs, in its research note on the broader MCP security crisis, mapped this design default into its MAESTRO threat modeling framework for agentic AI systems, treating it alongside tool interface abuse (the category that includes classic tool poisoning) as part of a single systemic risk picture rather than isolated incidents. No CISA advisory specific to this MCP SDK default has been published; the CVEs issued to date target individual downstream products rather than the protocol default itself, which is consistent with Anthropic's position that the underlying behavior is not going to change.

Where this intersects with tool poisoning

This SDK-level default does not replace classic tool poisoning, it compounds it. Tool poisoning works because MCP tool descriptions are natural-language metadata that a model reads to decide what a tool does, and that metadata is rarely surfaced to the human operator at runtime, a gap our earlier post on MCP security risks covers in depth. What the OX Security disclosure adds is a second layer underneath that gap: if an attacker can get a poisoned description or a manipulated configuration value in front of the SDK's STDIO handler, the unsanitized command path means the resulting action is not limited to what the model chooses to do, it can extend to arbitrary command execution on the host running the agent.

Separately, the MCPTox benchmark, which tested 45 live MCP servers and 353 authentic tools against major LLM agents, found attack success rates exceeding 60% overall and as high as 72% on the weakest configurations, with even the most resistant model tested, Claude-3.7-Sonnet, refusing poisoned tool calls in fewer than 3% of cases when the poisoning was well constructed. That data point is about model behavior in the face of a poisoned tool description, a distinct mechanism from the STDIO command execution default, but the two problems sit in the same threat surface: a poisoned tool description gets the agent to act, and an unsanitized transport layer determines how far that action can reach. Teams evaluating MCP server security should be reading both stories together, and our post on MCP server security scanners covers tooling that targets the description-poisoning side specifically.

Detection guidance for security teams

There is no single scan that confirms you are clear of this issue, because the flaw is a default rather than a discrete signature, but a few concrete checks will tell you how exposed you are today.

Inventory every MCP server and client in your environment

Start with what most teams do not have: a list of which internal tools, IDEs, and agents are running MCP servers or connecting as clients, and which SDK version and language each one uses.

Check dependency manifests against the CVE list

Cross-reference your MCP-adjacent dependencies (GPT Researcher, Upsonic, Windsurf, Flowise, LangFlow, LiteLLM, Langchain-Chatchat, and any custom nginx-ui or similar integrations) against the CVEs issued from this disclosure.

Audit STDIO configuration sources

Identify every place a config value, environment variable, or command string reaches an MCP STDIO handler, and confirm whether that value can be influenced by an external party, a marketplace listing, or an untrusted upstream service.

Log and monitor tool invocations, not just tool calls the model reports

Runtime logging that captures the actual command executed at the transport layer, not just the model's summary of what it did, is what will surface exploitation attempts against this specific flaw.

Mitigation guidance for security teams

Since Anthropic has stated it will not change the SDK default, mitigation is entirely on the implementer side for now. The practical steps that map directly to this disclosure:

Treat all external MCP configuration as untrusted input

Never pass a config value, tool description field, or marketplace listing directly into a command execution path without your own sanitization layer, since the SDK will not do it for you.

Install only from official, verified MCP registries

With 9 of 11 tested registries successfully poisoned in proof-of-concept testing, registry provenance is a real control, not a formality.

Sandbox MCP-enabled processes with restricted permissions

Run MCP servers with the minimum OS-level privileges needed, so that even a successful command injection has a limited blast radius.

Block public internet exposure of MCP services that do not need it

OX Security identified more than 7,000 publicly accessible servers during its audit; most internal tool servers have no reason to be internet-reachable at all.

Apply tool allowlisting and egress monitoring with deny-by-default destinations

Restrict which tools an agent can invoke and where network egress can go, so a poisoned tool description cannot silently exfiltrate data even if it gets the model to act on it.

Use short-lived, scoped credentials and human checkpoints for high-impact actions

Vault-issued, time-limited credentials and a required human approval step for destructive or high-privilege agent actions limit the damage from both command injection and classic tool poisoning.

What is likely to change, and what probably will not

Anthropic's public position, that unsanitized STDIO command execution is a secure default and sanitization is a developer responsibility, has not moved since the April disclosure, and there is no indication in the record that a protocol-level fix is planned. That means the realistic trajectory is more individual CVEs against downstream tools that inherited the default, similar to the ten-plus already issued, rather than a single upstream patch that closes the issue for everyone at once. Expect continued growth in third-party MCP security tooling, scanners, gateways, and session-isolation products that sit between agents and MCP servers to enforce the sanitization the SDK does not, since that is the gap the market is already moving to fill. Expect CSA Labs and similar research bodies to keep publishing under threat-modeling frameworks like MAESTRO rather than waiting on a CISA advisory specific to this default, since the issue does not fit the single-product-single-patch model those advisories are built around. For security teams, the practical read is that this is not a wait-for-the-patch situation. The default is not changing, so the controls listed above are the actual fix available today.

The bottom line

The April 2026 disclosure matters less because of any single exploit and more because of what it revealed about MCP's foundations: unsanitized command execution over STDIO is a documented default in every official SDK, not a bug in one server, and Anthropic has confirmed it intends to keep it that way. Combined with how easily classic tool poisoning gets a model to act against you, and how rarely tool descriptions are surfaced to a human, the two problems together mean security teams cannot treat MCP adoption as safe-by-default. Inventory what you run, treat every external configuration value as hostile until proven otherwise, and build the sanitization, monitoring, and containment layer yourselves, because the protocol will not do it for you.

Frequently asked questions

What is the difference between MCP tool poisoning and the April 2026 SDK design flaw?

Tool poisoning is an attack where a malicious tool description hides instructions a model reads but a human does not see. The April 2026 disclosure is a separate but related issue: every official MCP SDK executes STDIO transport commands without sanitization by default, which means a poisoned or manipulated input can extend beyond influencing model behavior into arbitrary command execution on the host.

Which MCP SDKs are affected by the design flaw disclosed in April 2026?

OX Security confirmed the unsanitized STDIO command execution behavior in the official MCP SDKs for Python, TypeScript, Java, and Rust, meaning the flaw is present across every major language implementation of the protocol rather than one vendor's packaging.

How many MCP servers are estimated to be affected?

OX Security estimated more than 200,000 vulnerable instances across a supply chain encompassing over 150 million package downloads, with more than 7,000 publicly internet-accessible MCP servers identified during its audit.

Has Anthropic fixed the MCP SDK design flaw?

No. Anthropic characterized the unsanitized STDIO command execution as a secure and intended default, declined to modify the protocol's architecture, and stated that sanitizing untrusted input is the responsibility of developers building on top of the SDK rather than the protocol itself.

What should security teams do now to reduce MCP tool poisoning and command injection risk?

Treat all external MCP configuration and tool description input as untrusted, install only from verified registries, sandbox MCP processes with restricted permissions, block unnecessary public exposure, apply tool allowlisting with egress monitoring, and require human approval for high-impact agent actions since the SDK itself will not sanitize this input.

Is there a CVE for the MCP SDK design flaw itself?

No single CVE covers the SDK default, since Anthropic does not classify it as a vulnerability requiring a fix. More than ten CVEs have instead been issued against individual downstream tools and platforms, including GPT Researcher, Upsonic, Windsurf, and Flowise, that inherited the unsanitized behavior from the reference SDK.

Sources & references

  1. CSA Labs - MCP Security Crisis: Systemic Design Flaws in AI Agent Infrastructure
  2. ITECS - MCP Tool Poisoning: Enterprise AI Agent Security in 2026
  3. OX Security - The Mother of All AI Supply Chains
  4. The Register - MCP 'design flaw' puts 200k servers at risk

Free resources

25
Free download

Critical CVE Reference Card 2025–2026

25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.

No spam. Unsubscribe anytime.

Free download

Ransomware Incident Response Playbook

Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.

No spam. Unsubscribe anytime.

Free newsletter

Get threat intel before your inbox does.

50,000+ security professionals read Decryption Digest for early warnings on zero-days, ransomware, and nation-state campaigns. Free, daily, no spam.

Unsubscribe anytime. We never sell your data.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals every morning.

Giveaway: InfoSec World 2026 All Access Pass ($3,895 value)

Details →
Daily Briefing

Subscribe to enter the giveaway

Every subscriber is automatically entered. You also get daily threat intel every morning: zero-days, ransomware, and nation-state campaigns. Free. No spam.

Already subscribed? You're already entered.

Giveaway

Win a $3,895 InfoSec World 2026 pass.