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.
NVD posted nine advisories on August 25, clustering into one shape: a local server assuming a browser can't reach it. PraisonAI validated MCP origins with request_origin.startswith(allowed) against a localhost allowlist, so an attacker-registered localhost.attacker.com passes...
StreamableHTTPServer.ServeHTTP and SSEServer.ServeHTTP accepted any request arriving over loopback regardless of the host it named (NVD). This one matters more than the individual server CVEs beside it because mcp-go is a widely used Go SDK, so every stdio-to-HTTP server built...
The single biggest cross-agent story this week isn't one CVE. It's that MCP became the dominant agent-hijack surface, and this is the defense that actually stops it. The pattern across a dozen findings: Sentry's MCP server weaponized via fake error events for an 85% agent-hija...
The defense-first MCP pattern from Christian Schneider treats every tool schema like a request from a stranger. A control point outside the client runs a five-stage validation pipeline. Stages 01 through 04 gate the discovery path, inspecting every schema before the model ever...
Terra Security's adversarial testing found recurring vulnerability patterns across AI coding tools including Claude Code, Loveable, and Base44. CVE-2026-25724 is a path traversal vulnerability in Claude Code (pre-2.1.7) where symbolic links bypass deny rules in settings.json b...
The most important security research this week. Check Point demonstrated three attack vectors in Claude Code exploiting project configuration files in untrusted repositories: (1) Hooks RCE (CVE-2025-59536, CVSS 8.7) — malicious hooks in .claude/settings.json execute shell comm...
MindPattern daily
One email a day at 7 AM. Sources and a take on every story. Unsubscribe anytime.