Dev.to Security 🔐 Cybersecurity 👁 0 📖 3 min read

The Schrödinger Identity of MCP: 37% of Officially Registered Endpoints Don't Know Who You Are

The Schrödinger Identity of MCP: 37% of Officially Registered Endpoints Don't Know Who You Are Guigui Wang — Correctover · 2026-11-12 · raw data & replayable scripts: github.com/DSHCorrectover/mcp-session-audit TL;DR:

The Schrödinger Identity of MCP: 37% of Officially Registered Endpoints Don't Know Who You Are

Guigui Wang — Correctover · 2026-11-12 · raw data & replayable scripts: github.com/DSHCorrectover/mcp-session-audit

TL;DR: We passively probed 57 servers advertising Streamable HTTP endpoints in the official MCP registry — one benign initialize each, no injection, no state change. 37% complete the handshake with zero authentication. 76% of those return their full tool inventory to callers who never performed the protocol handshake at all. One advertising-tech endpoint exposes 35 account-level tools (mailbox listing, account lookup, campaign management) to any curl one-liner. The deeper problem is architectural, and we named it: the Session-as-Identity antinomy.

What we found

Class Share What it means
Anonymous handshake OK 37% Anyone can enumerate tools. No credential, no registration, no subject concept.
Zero-handshake tool inventory 76% of the above No initialize needed either — a bare tools/list POST works.
OAuth-gated (correct 401 + RFC 9728 metadata) 21% The minority doing it by the book.
Registered-but-unreachable 16% URLs that no longer serve standard traffic — a registry-hygiene footnote.

Every call was read-only, carried an explicit X-Audit-By: Correctover header, and is replayable from our repo. We named no one in this post; responsible disclosure to the affected operators comes first.

Why "no auth" is worse than it sounds

An MCP server is not a website. Its tool list is a machine-readable contract that LLM agents consume and execute. A tool named get_account behind no authentication is not a missing login page — it is an unauthenticated data-retrieval API wearing an agent-friendly protocol. The ecosystem's story so far has been about MCP servers being easy to build; our data says they have been equally easy to expose.

The architectural flaw: Session-as-Identity

For servers that do implement authentication, we ran controlled experiments against the official TypeScript SDK (self-operated targets, our own tokens, our own sessions). The result: the session ID and the authenticated subject are never bound. With a valid attacker token and a leaked victim session ID, tools execute inside the victim's session, and a plain DELETE terminates it — the victim's own valid token then bounces off a 404. We call this the Session-as-Identity antinomy: MCP conflates a routing identifier ("which context") with a subject identifier ("who"). The spec (2025-06-18) never requires binding; the reference implementation validates sessions by string equality; a Ruby SDK CVE and the protocol's own SEP-2567 (sessionless MCP, merged Final) confirm the class is known upstream.

Three verdicts cover the whole ecosystem:

  • unauthenticated-surface — no identity exists to bind (37% of registry)
  • session-as-identity — identity exists but sessions don't bind to it (SDK-class, measured)
  • bound — correct implementations exist (we found one; it validates fabricated and missing session IDs properly). It can be done.

What to do

  • Operators: put OAuth in front of your MCP endpoint (RFC 9728 discovery), and treat every session ID as a capability bound to the authenticated subject — or adopt the sessionless model.
  • Protocol authors: SEP-2567 removes sessions; SEP-1299 binds them. Either direction resolves the antinomy — but 37% of the registry needs the part neither SEP can ship: operators actually turning authentication on.
  • You, in 30 seconds: run our one-line GitHub Action against your own server and see which verdict you get.

We sell the verdict, and you can re-verify it yourself.

Method, per-endpoint raw data, probe scripts, and the full test protocol: github.com/DSHCorrectover/mcp-session-audit. Errors and corrections welcome — we publish our own error log with the data.

📰 Read the original article on Dev.to Security

Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.