MCP Java SDK has a Hardcoded Wildcard CORS (Access-Control-Allow-Origin: *)
Moderate severity
GitHub Reviewed
Published
Mar 30, 2026
in
modelcontextprotocol/java-sdk
•
Updated Mar 31, 2026
Package
Affected versions
< 1.0.0
= 1.1.0
Patched versions
1.0.1
1.1.1
Description
Published to the GitHub Advisory Database
Mar 30, 2026
Reviewed
Mar 30, 2026
Published by the National Vulnerability Database
Mar 31, 2026
Last updated
Mar 31, 2026
Summary
Hardcoded Wildcard CORS (Access-Control-Allow-Origin: * )
Attack Scenario
An attacker-controlled web page instructs the victim's browser to open GET https://internal-mcp-server/sse. Because Access-Control-Allow-Origin: * allows cross-origin SSE reads, the attacker's page receives the endpoint event — which contains the session ID. The attacker can then POST to that endpoint from their page using the victim's browser as a relay.
Comparison with python-sdk
No Access-Control-Allow-Origin header is emitted by either Python transport. The browser's default same-origin policy remains in full effect.
https://github.com/modelcontextprotocol/python-sdk/blob/main/src/mcp/server/sse.py
https://github.com/modelcontextprotocol/python-sdk/blob/main/src/mcp/server/streamable_http.py
Recommendation
In the SDK, the transport layer should not own CORS policy. Server implementors who need cross-origin access can add a CORS filter at the servlet filter or Spring Security layer.
Resources
References