NSA Warns on MCP Security Gaps — and Three SDK CVEs Prove the Point

identity access free stock image for MCPwatch editorial use
Topic image: identity access free stock image for MCPwatch editorial use.

NSA Formally Warns on MCP Security Gaps — and Three SDK Vulnerabilities Show Why

On May 20, 2026, the National Security Agency’s Artificial Intelligence Security Center (AISC) published Model Context Protocol (MCP): Security Design Considerations for AI-Driven Automation — the first cybersecurity information sheet (CSI) from a major government signals agency focused exclusively on MCP. It is the most authoritative government validation yet that MCP’s security surface is not a niche developer concern but a systemic infrastructure risk.

The CSI identifies fundamental weaknesses in the protocol’s trust model: MCP has no mandatory authentication, relies on unsigned dynamic discovery for tools, and allows agents to execute actions without verifying the provenance of tool descriptions. The NSA calls these patterns “inverted trust” — where the system defaults to trusting every connection and every tool description rather than requiring proof.

Three CVE disclosures in the official MCP SDKs — CVE-2026-34237 (Java SDK, hardcoded wildcard CORS), GHSA-q382-vc8q-7jhj (Go SDK, JSON key smuggling), and CVE-2026-11624 (DNS rebinding before v0.25.0) — are concrete demonstrations of the exact gaps the NSA CSI describes. Together they make the case that the risk is not theoretical: it lives inside the reference implementations themselves.

What the NSA CSI Actually Says

The NSA’s Cybersecurity Information Sheet is a 14-page document that systematizes what MCPwatch has been reporting since our first-wave incident coverage. Its key findings:

  • No mandatory authentication or authorization. The MCP specification does not require servers to authenticate clients, or clients to verify server identity. The default is open. As the CSI notes, implementations that rely on the spec’s defaults are operating with the trust model inverted: every connection is trusted until proven hostile, rather than verified before access is granted.
  • Unsigned tool descriptions are an execution vector. Tool descriptions — the text that tells an AI agent what a tool does and how to call it — are not signed or integrity-protected. A compromised or malicious MCP server can inject hidden instructions into tool descriptions that the agent follows without the user ever seeing them. This is the tool-poisoning class that Microsoft’s June 30 advisory also addressed.
  • Session identity is not bound to transport credentials. The CSI warns that MCP sessions do not currently enforce a binding between the authenticated identity and the session that executes actions. An attacker who intercepts or hijacks a session can act with the original user’s privileges.
  • Supply chain risk through dynamic tool discovery. MCP’s design allows agents to discover and connect to new tools at runtime. The NSA flags that this dynamic discovery — without provenance verification — is a supply chain attack surface: a malicious server added to a registry or injected into a discovery flow can immediately reach production agents.
  • Compensating controls are the NSA’s recommended interim step. Until the protocol itself mandates verification, the CSI recommends network segmentation, egress filtering, tool-description signing, explicit allowlisting of MCP servers, and runtime monitoring of agent actions.

The NSA is careful to state that it is not recommending that organizations avoid MCP. The guidance explicitly supports continued adoption, but with security controls that the protocol does not yet enforce by default.

Three SDK CVEs That Prove the Point

The NSA’s warning about authentication gaps and supply chain trust is not abstract. Three vulnerabilities in the official MCP SDKs — the code that every Java and Go implementer starts from — illustrate exactly the categories the CSI describes.

CVE-2026-34237: Hardcoded Wildcard CORS in the MCP Java SDK

Severity: Medium (CVSS 5.3 per NVD). Affected: MCP Java SDK before 0.83.0, 1.0.1, and 1.1.1. Fixed in: 0.83.0, 1.0.1, and 1.1.1.

CVE-2026-34237 is a hardcoded Access-Control-Allow-Origin: * in the MCP Java SDK’s transport layer. The official Java implementation — the reference for anyone building an MCP server or client in the JVM ecosystem — shipped with CORS set to allow any origin by default. Any server using the SDK’s default SSE transport configuration accepted cross-origin requests from any domain without restriction.

This is the “no mandatory authentication” problem that the NSA CSI identifies, but at the transport layer rather than the application layer. The SDK’s default configuration was open, and any operator who did not explicitly override it was running an MCP server that any web page could connect to. The patch removed the wildcard and moved CORS policy out of the transport layer, where the CSI says it should not live in the first place.

Operator action: If you are running MCP Java SDK versions before 0.83.0, 1.0.1, or 1.1.1, update immediately. Audit any Java-based MCP servers for CORS configuration. Even on patched versions, verify that your CORS policy is not still permissive.

GHSA-q382-vc8q-7jhj: JSON Key Smuggling in the MCP Go SDK

Severity: High (CVSS 8.2 per CVEReports). Affected: MCP Go SDK v1.3.1 through v1.4.0. Fixed in: v1.4.1.

GHSA-q382-vc8q-7jhj is a semantic smuggling vulnerability in the MCP Go SDK’s JSON parser. When the Go SDK transitioned to the segmentio/encoding library in v1.3.1, the new parser implemented aggressive key matching that treated JSON keys with null Unicode characters (\u0000) appended at the end as equivalent to their base strings. An attacker could inject a key like "role\u0000" that the parser would silently map to the role struct field, bypassing any security filter that checked for the literal string "role".

This is a supply chain trust problem at the protocol implementation layer — precisely the category the NSA CSI warns about. A message that looks valid to the application’s security checks is actually an overridden field. When deployed behind a WAF or reverse proxy that filters on key names, the null-byte variant passes through because the proxy does not interpret Unicode escapes the same way the Go SDK does. The result: an attacker can smuggle privilege-escalation or configuration-overwrite fields past security controls.

The advisory also notes that the Go SDK’s behavior diverges from the TypeScript and Python SDKs, which use case-sensitive parsing and would reject the same messages. This cross-implementation inconsistency is itself a risk: an operator who tests against one SDK may believe their filters work while a different SDK in production processes the same payload differently.

Operator action: Update Go SDK to v1.4.1 or later. If you cannot update immediately, add pre-processing that strips or rejects JSON keys containing null bytes before they reach the Go SDK parser. Test your WAF and proxy rules against null-byte payloads, not just clean key names.

CVE-2026-11624: DNS Rebinding Before MCP v0.25.0

Severity: Critical (rated by Tenable). Affected: All MCP server implementations prior to v0.25.0. Fixed in: v0.25.0, which introduced Origin header validation.

CVE-2026-11624 affects every MCP server implementation that relied on the protocol’s pre-0.25.0 behavior, where there was no mechanism to validate the Origin header on incoming connections. An attacker could use DNS rebinding to make a browser request appear to come from a local or trusted address, then connect to an MCP server running on the developer’s machine or internal network. This is the trust-boundary gap the NSA CSI identifies: without origin validation, the server cannot distinguish between a legitimate local client and a cross-origin attacker.

The fix in v0.25.0 added allowedHosts as an explicit configuration option, but this only helps operators who enable it. The default remains permissive — the same inverted-trust pattern the NSA highlights.

Operator action: Ensure all MCP servers are running v0.25.0 or later. Explicitly configure allowedHosts to restrict which origins can connect. Do not rely on the default configuration.

Why These CVEs Matter Together

Individually, each of these vulnerabilities is a specific implementation bug with a specific patch. Together, they map directly to the NSA CSI’s three structural concerns:

  • CVE-2026-34237 (wildcard CORS) is a transport-layer instantiation of the CSI’s “no mandatory authentication” finding. The default is open. The SDK shipped open. Operators had to know to close it.
  • GHSA-q382-vc8q-7jhj (JSON key smuggling) is a supply chain trust violation. The SDK parser silently accepted malformed input that security infrastructure could not see. The protocol’s assumption that SDK implementations are interoperable was wrong — and that inconsistency is itself a trust boundary gap.
  • CVE-2026-11624 (DNS rebinding) is the session-identity problem. Without origin validation, a server cannot determine whether a connection is from the legitimate client or from a cross-origin attacker. The fix exists, but it requires explicit configuration — the protocol does not enforce it.

None of these are exotic zero-days. They are the predictable result of a protocol that defaults to trust and delegates security to implementers who may not know the defaults are dangerous. The NSA CSI is essentially saying: the protocol’s trust model is structurally inverted, and until the specification changes, operators must compensate with explicit controls.

Operator Checklist: What to Do Now

Based on the NSA CSI’s recommendations and the evidence from these three CVEs, MCP operators should take these concrete steps:

  1. Update all MCP SDKs to the latest patched versions. Java SDK to 0.83.0 / 1.0.1 / 1.1.1 or later. Go SDK to v1.4.1 or later. MCP protocol to v0.25.0 or later with explicit allowedHosts.
  2. Audit CORS configuration on every MCP server. Remove wildcard origins. Restrict Access-Control-Allow-Origin to known, trusted domains. The NSA CSI explicitly states that transport-layer CORS should not be the sole security boundary.
  3. Implement tool-description signing or allowlisting. At minimum, pin the MCP servers your agents connect to. At best, verify the integrity of tool descriptions before the agent processes them. See our MCP Server Security Checklist for a practical framework.
  4. Filter JSON payloads for null-byte and Unicode smuggling. Before Go SDK v1.4.1, null Unicode characters in JSON keys bypassed security filters. Add pre-processing that strips or rejects keys containing null bytes, regardless of which SDK you use.
  5. Enable and configure allowedHosts on all MCP servers. Do not rely on the default permissive configuration. The NSA CSI’s core message is that the default is not safe.
  6. Segment MCP traffic. Use network-level egress controls so that even a compromised MCP server or agent cannot reach arbitrary external endpoints. Our MCP SSRF Risk: Operator Audit provides a practical framework for this.
  7. Monitor agent actions at runtime. Log tool calls, their parameters, and their outcomes. The NSA CSI recommends runtime monitoring as a compensating control for the protocol’s lack of built-in action verification.
  8. Read the NSA CSI. The full document is available at nsa.gov. It is 14 pages, clearly written, and free. If your organization runs MCP servers or allows agents to connect to MCP tools, this should be required reading for your security team.

What Is Known and What Is Uncertain

Known: The NSA AISC has published a formal CSI identifying structural security gaps in MCP. Three CVEs in the official SDKs demonstrate that these gaps produce exploitable vulnerabilities. Patches exist for all three CVEs. The CSI provides a concrete list of compensating controls.

Uncertain: Whether the MCP specification itself will adopt mandatory authentication, tool-description signing, or session-identity binding in a future version. The NSA CSI is advisory, not regulatory. Adoption of the recommended controls remains voluntary. The number of unpatched or misconfigured MCP servers in production is not publicly tracked, though scanner data from multiple research teams (NimbleBrain, PipeLab, Practical DevSecOps) suggests that only a small fraction of public MCP servers implement the controls the CSI recommends.

Sources

Leave a Comment