What happened
Attacker injects a single character into the HTTP Host header of a request to a Starlette-based MCP server or AI agent harness, causing the server's auth middleware to evaluate the wrong request path and approve unauthorized access.
2026-05-26
CriticalMedia reportA single injected character in the HTTP Host header bypasses path-based auth in Starlette/FastAPI — exposing biopharma DBs, mailboxes, IoT devices, and PII across millions of AI agent MCP servers.
What happened
Attacker injects a single character into the HTTP Host header of a request to a Starlette-based MCP server or AI agent harness, causing the server's auth middleware to evaluate the wrong request path and approve unauthorized access.
Why it matters
Confirmed exposed data types include: biopharma clinical trial databases and M&A data, full mailbox read/send/delete access, SSH lateral movement to industrial IoT devices via bastion, live PII and KYB data, candidate hiring pipeline data, AWS topology and distributed traces, subscriber lists with mass email capability, and raw financial and health records. Security researchers describe this as "materially understated" by the 7.0 CVSS score.
Missing authorization check
External authorization receipts for high-impact agent actions — independent of the MCP server transport layer. Even if the MCP server auth is bypassed, a PP receipt requirement means the attacker cannot produce a valid signed authorization for destructive or exfiltration actions.
Would PP block it?
For PP-gated actions (data mutations, credential use, external API calls), the attacker hitting a BadHost endpoint cannot produce a valid PP receipt from an external authority channel — the bypass is at the HTTP routing layer, not the PP signing layer. For non-gated read operations, PP provides no coverage: BadHost would succeed in exfiltrating data that doesn't require a receipt. Full coverage requires gating all sensitive reads, not just writes.
Incident analysis
2026-05-26
X41 D-Sec discovers CVE-2026-48710 (BadHost) in Starlette; Secwest co-publishes research documenting scope across vLLM, LiteLLM, TGI, most Python MCP server tooling.
2026-05-26
Nemesis partners with X41 D-Sec to launch public scanner (mcp-scan.nemesis.services) to detect vulnerable servers.
2026-05-26
Starlette 1.0.1 released with fix. Ars Technica publishes coverage. Researchers report confirmed in-the-wild exposure across biopharma, IoT, email/SaaS, and cloud monitoring.
2026-05-26
CVSS 7.0 assigned; X41 D-Sec publicly states rating materially understates severity given the breadth of affected MCP infrastructure.
Ongoing
Millions of production servers still running pre-1.0.1 Starlette. Operators advised to run scanner and patch immediately.
Authorization boundary
This incident is categorized as Tool execution / MCP. The relevant Permission Protocol gate is Tool-Call Gate. The read is conditional: the block only applies where the real action boundary is routed through a gate.
PP's external authority chain operates independently of the MCP server transport. A BadHost bypass cannot forge a PP authorization receipt — receipts require independent channel authentication outside the compromised server. However, PP does not prevent read-only data access or lateral movement that doesn't require a PP-gated action.
Related incidents and controls
Start small
This incident maps to Tool-Call Gate. Start with the boundary that controls the actual action, then require a signed receipt before execution.