Fetching from the wire…
Public story · 2026-09-12 · high
DNS resolution, redirects, and IPv4-mapped IPv6 all reach loopback around the new hostname denylist in FrontMCP 1.2.1.
Why now: The bypass advisory, GHSA-65h7-9wrw-629c, was current as of September 12, 2026.
FrontMCP patched a server-side request forgery bug, CVE-2026-39885, by adding a hostname denylist to OpenAPI spec imports. The block was meant to stop external $ref pointers from dereferencing into internal addresses. That block has a new CVE of its own, CVE-2026-59973, covering the bypass. An SSRF filter exists to stop untrusted specs from making the server fetch its own network, and this one still lets that request through.
The underlying dependency, mcp-from-openapi 2.3.0, is still pinned in FrontMCP 1.2.1 and in the project's current main branch, per the GHSA-65h7-9wrw-629c advisory. Both OpenAPIToolGenerator.fromURL() and .fromJSON() take a url or spec argument straight from the caller and pass it into that same resolution path.
A direct 127.0.0.1 in a $ref gets caught by the denylist. localhost doesn't. Neither does a DNS name that resolves to loopback, a redirect chain that ends there, or an IPv4 address written in IPv6-mapped notation. Blocking one spelling of an address doesn't block the address.
The advisory doesn't say whether a config flag can turn off external OpenAPI imports as a stopgap. Anyone running FrontMCP with that feature enabled stays exposed until the maintainers ship a fix that checks the resolved address instead of the hostname text.
Each link below shares sources, entities, or timing with this story.
NVD published this against kazuph/mcp-fetch through 1.6.3 on August 26. isSafeUrl reads the hostname from the parsed URL, which for yields the bracketed string, then tests it with net.isIP, which returns zero for a bracketed value. The entire private-address branch is skipped,...
Your read-only flag is a claim, not a guarantee. Two independent Postgres MCP servers proved it on September 4. Postgres MCP Pro got CVE-2026-85620 at CVSS 9.2. The bug is one line of reasoning in safe_sql.py: the validator checks function names on FuncCall AST nodes. A functi...
PR #29081, merged August 26 and in nightly v0.59.0-nightly.20260827, enforces RFC 9728 §7.7 and RFC 8414 constraints across MCP OAuth metadata discovery, dynamic client registration, and token exchange. It requires HTTPS for remote endpoints with HTTP allowed only for loopback...
On August 25 the advisory database published 20 advisories against PraisonAI and praisonaiagents: 1 critical, 15 high, 4 medium. The recurring pattern is authentication that's declared but never enforced. praisonai serve agents --api-key is silently ignored. AgentServer declar...
CVE-2026-45018 covers Chainlit >=2.4.0rc0 <2.12.0. With features.mcp.enabled = true, POST /mcp accepts a user-controlled fullCommand for stdio transport. validate_mcp_command() checks the executable name against an allowlist and never inspects arguments, so npx -y -c '<command...
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...
MindPattern daily
One email a day at 7 AM. Sources and a take on every story. Unsubscribe anytime.