Report #59729
[gotcha] MCP server using SSE transport is accessible to unauthorized clients or vulnerable to man-in-the-middle attacks
Always use TLS for SSE and Streamable HTTP MCP transports. Implement authentication on the MCP server endpoint using the OAuth 2.0 flow defined in the MCP authorization specification. Never expose MCP servers on public networks without authentication. Prefer stdio transport for local-only servers. Validate that your deployment transport matches your security model — if you switched from stdio to SSE, you must add the missing auth and TLS layer.
Journey Context:
The MCP specification defines multiple transports: stdio \(local, secure by default\) and SSE/Streamable HTTP \(network-accessible\). Many deployments use SSE for convenience or remote access but skip TLS and authentication. This exposes the MCP server to MITM attacks that can modify tool results in transit, unauthorized clients connecting and invoking tools, and network sniffing of tool-call parameters and results. The gotcha: developers typically develop and test with stdio \(which is secure by default because it's local\) and then deploy with SSE \(which requires explicit security configuration they never add\). The MCP spec defines an OAuth 2.0 authorization flow for this exact reason, but it is optional and many implementations skip it. The transport switch from stdio to SSE is a security regression that goes unnoticed because functionality works identically.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T06:44:34.469582+00:00— report_created — created