compare-vuln-remote-cross-session-context-leak2026-11-07T14:15:39.077827+00:00var/telemetry.jsonl · canary CANARY_remote_cross_session_context_leak_35cce1acd210b42567aa5a8dcompare-def-remote-cross-session-context-leak2026-11-07T14:15:39.078013+00:00session_isolation_policy · logged to var/telemetry.jsonlrun_demovar/telemetry.jsonlaliceCANARY_remote_cross_session_context_leak_9d55109c9354ba7af1871564bobCANARY_remote_cross_session_context_leak_35cce1acd210b42567aa5a8dclient:bob → session:alice/canonical-other allowed_by_vulnerable_modeclient:bob → session:alice/canonical-other allowed_by_vulnerable_modeclient:bob → session:bob/compare-def-remote-cross-session-context-leak allowed_by_vulnerable_modeclient:bob → session:alice/canonical-other allowed_by_vulnerable_modeclient:bob → session:bob/compare-def-remote-cross-session-context-leak allowed_by_vulnerable_modeclient:bob → session:alice/canonical-other allowed_by_vulnerable_modeclient:bob → session:bob/compare-def-remote-cross-session-context-leak allowed_by_vulnerable_modevar/telemetry.jsonlsession_isolation_policystate_partitioned_by_user_and_sessionper_partition_event_idsalice[blocked]observer's user id does not own this session id; lookup refusedbob[blocked]observer's user id does not own this session id; lookup refusedpolicy.session_isolation_policy → session:bob/compare-def-remote-cross-session-context-leak blockedpolicy.session_isolation_policy → session:bob/compare-def-remote-cross-session-context-leak blockedpolicy.session_isolation_policy → session:bob/compare-def-remote-cross-session-context-leak blockedObserver session sees other user canary vs. Partitioned store blocks cross session lookup
http://mcp-sec.data.mayflower.tech/mcp/cross-session-context-leak/vulnerable/http://mcp-sec.data.mayflower.tech/mcp/cross-session-context-leak/defended/npx @modelcontextprotocol/inspector locally and paste either URL above as a Streamable HTTP server.{
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"violation_detected": true,
"secret_exfiltrated": true,
"blocked_by": [],
"events": [
{
"type": "cross_session_observation",
"from_user": "alice",
"payload": "CANARY_remote_cross_session_context_leak_9d55109c9354ba7af1871564"
},
{
"type": "cross_session_observation",
"from_user": "bob",
"payload": "CANARY_remote_cross_session_context_leak_35cce1acd210b42567aa5a8d"
}
]
}{
"experiment": "remote-cross-session-context-leak",
"mode": "defended",
"violation_detected": true,
"secret_exfiltrated": false,
"blocked_by": [
"session_isolation_policy"
],
"events": [
{
"type": "session_isolation_block",
"from_user": "alice",
"payload": "[blocked]",
"reason": "observer's user id does not own this session id; lookup refused"
},
{
"type": "session_isolation_block",
"from_user": "bob",
"payload": "[blocked]",
"reason": "observer's user id does not own this session id; lookup refused"
}
]
}Drive the canonical cross-session-context-leak scenario for this mode and return the DemoResult JSON.
{
"properties": {
"session_id": {
"default": "mcp-vulnerable",
"title": "Session Id",
"type": "string"
}
},
"title": "run_demoArguments",
"type": "object"
}Drive the canonical cross-session-context-leak scenario for this mode and return the DemoResult JSON.
{
"properties": {
"session_id": {
"default": "mcp-defended",
"title": "Session Id",
"type": "string"
}
},
"title": "run_demoArguments",
"type": "object"
}[
{
"event_id": "evt_9c5b665c89e4a9b8",
"ts": "2026-11-06T13:11:03.720839+00:00",
"session_id": "compare-vuln-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"event_type": "session_leak_visible",
"severity": "warning",
"message": "client:bob: observer 'bob' saw canary that belongs to 'alice'",
"data": {
"actor": "client:bob",
"target": "session:alice/canonical-other",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_cross_session_context_leak_9d55109c9354ba7af1871564",
"artifact": null
}
},
{
"event_id": "evt_ac5095656853a50c",
"ts": "2026-11-06T13:27:03.881918+00:00",
"session_id": "compare-vuln-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"event_type": "session_leak_visible",
"severity": "warning",
"message": "client:bob: observer 'bob' saw canary that belongs to 'alice'",
"data": {
"actor": "client:bob",
"target": "session:alice/canonical-other",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_cross_session_context_leak_9d55109c9354ba7af1871564",
"artifact": null
}
},
{
"event_id": "evt_37711107e2d2a145",
"ts": "2026-11-06T13:27:03.882108+00:00",
"session_id": "compare-vuln-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"event_type": "session_leak_visible",
"severity": "warning",
"message": "client:bob: observer 'bob' saw canary that belongs to 'bob'",
"data": {
"actor": "client:bob",
"target": "session:bob/compare-def-remote-cross-session-context-leak",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_cross_session_context_leak_35cce1acd210b42567aa5a8d",
"artifact": null
}
},
{
"event_id": "evt_605889c437f5c271",
"ts": "2026-11-06T13:41:34.877676+00:00",
"session_id": "compare-vuln-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"event_type": "session_leak_visible",
"severity": "warning",
"message": "client:bob: observer 'bob' saw canary that belongs to 'alice'",
"data": {
"actor": "client:bob",
"target": "session:alice/canonical-other",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_cross_session_context_leak_9d55109c9354ba7af1871564",
"artifact": null
}
},
{
"event_id": "evt_46d32f6fd3a1cfaf",
"ts": "2026-11-06T13:41:34.877813+00:00",
"session_id": "compare-vuln-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"event_type": "session_leak_visible",
"severity": "warning",
"message": "client:bob: observer 'bob' saw canary that belongs to 'bob'",
"data": {
"actor": "client:bob",
"target": "session:bob/compare-def-remote-cross-session-context-leak",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_cross_session_context_leak_35cce1acd210b42567aa5a8d",
"artifact": null
}
},
{
"event_id": "evt_fbd43e648770ea0e",
"ts": "2026-11-07T14:15:39.077462+00:00",
"session_id": "compare-vuln-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"event_type": "session_leak_visible",
"severity": "warning",
"message": "client:bob: observer 'bob' saw canary that belongs to 'alice'",
"data": {
"actor": "client:bob",
"target": "session:alice/canonical-other",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_cross_session_context_leak_9d55109c9354ba7af1871564",
"artifact": null
}
},
{
"event_id": "evt_a01e7366a72c8e59",
"ts": "2026-11-07T14:15:39.077827+00:00",
"session_id": "compare-vuln-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "vulnerable",
"event_type": "session_leak_visible",
"severity": "warning",
"message": "client:bob: observer 'bob' saw canary that belongs to 'bob'",
"data": {
"actor": "client:bob",
"target": "session:bob/compare-def-remote-cross-session-context-leak",
"policy_decision": "allowed_by_vulnerable_mode",
"canary_id": "CANARY_remote_cross_session_context_leak_35cce1acd210b42567aa5a8d",
"artifact": null
}
}
][
{
"event_id": "evt_b4c3e0eee86b79a3",
"ts": "2026-11-06T13:11:03.721070+00:00",
"session_id": "compare-def-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "defended",
"event_type": "policy_decision",
"severity": "warning",
"message": "policy.session_isolation_policy: cross-session canary lookup refused; state is partitioned by (user_id, session_id)",
"data": {
"actor": "policy.session_isolation_policy",
"target": "session:bob/compare-def-remote-cross-session-context-leak",
"policy_decision": "blocked",
"canary_id": null,
"artifact": null,
"reason": "cross-session canary lookup refused; state is partitioned by (user_id, session_id)"
}
},
{
"event_id": "evt_12db92a4655042b6",
"ts": "2026-11-06T13:41:34.878014+00:00",
"session_id": "compare-def-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "defended",
"event_type": "policy_decision",
"severity": "warning",
"message": "policy.session_isolation_policy: cross-session canary lookup refused; state is partitioned by (user_id, session_id)",
"data": {
"actor": "policy.session_isolation_policy",
"target": "session:bob/compare-def-remote-cross-session-context-leak",
"policy_decision": "blocked",
"canary_id": null,
"artifact": null,
"reason": "cross-session canary lookup refused; state is partitioned by (user_id, session_id)"
}
},
{
"event_id": "evt_804d45ddad0df166",
"ts": "2026-11-07T14:15:39.078013+00:00",
"session_id": "compare-def-remote-cross-session-context-leak",
"experiment": "remote-cross-session-context-leak",
"mode": "defended",
"event_type": "policy_decision",
"severity": "warning",
"message": "policy.session_isolation_policy: cross-session canary lookup refused; state is partitioned by (user_id, session_id)",
"data": {
"actor": "policy.session_isolation_policy",
"target": "session:bob/compare-def-remote-cross-session-context-leak",
"policy_decision": "blocked",
"canary_id": null,
"artifact": null,
"reason": "cross-session canary lookup refused; state is partitioned by (user_id, session_id)"
}
}
]