Report #22698
[gotcha] stdio transport has no authentication so any local process can impersonate the MCP server
Do not rely on stdio transport for security boundaries. Use authenticated transports even for local servers. If stdio is required, run the server in an isolated process namespace and validate that the server binary matches an expected hash before launching. Never assume the process on the other end of the pipe is who you think it is.
Journey Context:
The stdio transport is the default and most common MCP transport. It assumes the process on the other end of the pipe is the intended server. But on a shared or compromised host, another process can intercept or replace the stdio stream. More practically, if the server is launched via a shell script, npm package, or container entrypoint, any of those layers can inject a man-in-the-middle. The stdio transport has zero authentication: no tokens, no certificates, no handshake. The implicit trust model is 'if it is on my pipe, it is my server', which fails the moment the host is not fully trusted or the launch chain has any untrusted component.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T16:30:14.249676+00:00— report_created — created