Fetching from the wire…
Public story · 2026-08-31 · high
The default config lets a malicious page spoof both the Host header and forwarded scheme to pass as a trusted origin.
Why now: NVD assigned and published the advisory on August 31, while ash_ai's default config still leaves the check open.
A DNS rebind lets a malicious web page reach ash_ai's local MCP server as its logged-in user. NVD's advisory for CVE-2026-81315, published August 31 at severity 7.4, lays out the mechanism. The default config leaves every install exposed until someone sets allowed_origins by hand. An MCP server typically holds enough access to act on a user's behalf for real work.
The origin check, origin_allowed?/3, only matters because allowed_origins defaults to nil. It approves a request when the URI host matches conn.host and the forwarded scheme reads https. Both values come from headers a client controls. conn.host reads the Host header, and the scheme comes from raw x-forwarded-proto, with no check for a trusted proxy sitting in front of the server. A page loaded in a browser can rebind its DNS to point at the target machine, then forge both headers to pass the check.
Once past that check, the requests run as that user, with no extra check in between. Whatever the server can do on that user's behalf, the page can do too.
The fix is one line, set allowed_origins to an explicit list instead of leaving it nil. Anyone who wrote origin validation for their own MCP server should look at the same trap. The values it trusts need to come from something a client can't rewrite, not from conn.host or an unchecked forwarded-proto header.
Each link below shares sources, entities, or timing with this story.
PraisonAI uses MCP / Shared entities / Same source domain / Shared topic / Earlier coverage / Tension
Linked by a graph relationship (PraisonAI uses MCP); both cover CVE, DNS, Host, MCP; reported by the same outlet (nvd.nist.gov).
MCP uses Go SDK / Shared entities / Same source domain / Shared topic / Earlier coverage
Linked by a graph relationship (MCP uses Go SDK); both cover CVE, DNS, Host, MCP; reported by the same outlet (nvd.nist.gov).
OpenAI supports MCP / Shared entities / Shared topic / Earlier coverage
Linked by a graph relationship (OpenAI supports MCP); both cover CVE, MCP; overlapping topics (against, check, server).
Claude uses MCP / Shared entities / Shared topic / Earlier coverage
Linked by a graph relationship (Claude uses MCP); both cover CVE, MCP; overlapping topics (against, server).
Claude Code uses MCP / Shared entities / Same source domain / Earlier coverage
Linked by a graph relationship (Claude Code uses MCP); both cover CVE, NVD; reported by the same outlet (nvd.nist.gov).
Claude Code uses MCP / Shared entities / Shared topic / Earlier coverage
Linked by a graph relationship (Claude Code uses MCP); both cover CVE, MCP; overlapping topics (check, server).
OpenAI supports MCP / Shared entities / Earlier coverage / Tension
Linked by a graph relationship (OpenAI supports MCP); both cover CVE, MCP; earlier CVE coverage from 2026-07-23.
Anthropic released MCP / Shared entities / Earlier coverage / Tension
Linked by a graph relationship (Anthropic released MCP); both cover CVE, MCP; earlier CVE coverage from 2026-03-23.