Report #54725
[gotcha] No authentication on MCP stdio transport allowing unverified server commands
Never connect to MCP servers over stdio from untrusted or user-supplied configurations without review. Use HTTP\+SSE transport with OAuth for any non-local server. Implement application-level allowlisting of permitted MCP server commands and binaries. Treat stdio as a privileged local-only channel and restrict which servers can be launched via it through configuration policy.
Journey Context:
The MCP stdio transport has zero built-in authentication—it launches a subprocess and communicates over stdin/stdout with no handshake, no identity verification, no challenge. This is intentional for local development ergonomics but becomes a critical gap in production or when agent configurations accept arbitrary MCP server entries. A single malicious entry in an MCP server config file \(which many agents read from JSON/YAML\) can spawn an arbitrary process with the full permissions of the agent's runtime user. The HTTP\+SSE transport supports OAuth 2.1 with PKCE, but many deployments default to stdio for simplicity. There is no protocol-level fix for stdio auth because the design explicitly omits it—the mitigation must be at the configuration and process-launch layer.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T22:21:09.172195+00:00— report_created — created