Network-AI CVE-2026-46701 — Unauthenticated Cross-Origin MCP Tool Invocation
AI relevance: An MCP server package for AI agent orchestration ships with authentication effectively disabled by default and permissive CORS, so any website a developer visits can invoke all 22 tools against their local agent — including spawning new agents and writing to the shared blackboard.
- Network-AI (
network-aion npm) is an AI agent orchestration framework that exposes 22 MCP tools over an SSE server on localhost. - The server reads its secret from
process.env['NETWORK_AI_MCP_SECRET']with a fallback to an empty string. If the env var is unset — the default —_isAuthorized()returnstrueunconditionally. - Every response carries
Access-Control-Allow-Origin: *, meaning a malicious webpage can make cross-origin fetch calls to the localhost MCP endpoint and read results. - An attacker who lures a developer to their page can invoke all 22 tools without any Authorization header, including
config_set,agent_spawn, andblackboard_write. - This is the simplest possible MCP server misconfiguration: no auth + wildcard CORS = unauthenticated cross-origin tool invocation against a local agent runtime.
- Published as GHSA-j3vx-cx2r-pvg8 on May 21, 2026; credited to researchers 232-323 and min8282.
Why it matters
Developers routinely install npm packages that launch localhost servers during development. An unauthenticated MCP server on localhost is effectively an open door — any site in the browser can reach it, and every tool is available for abuse. The combination of empty-default auth and wildcard CORS turns a developer workstation into an externally controllable agent host.
What to do
- If you use Network-AI, set
NETWORK_AI_MCP_SECRETto a non-empty value immediately. - Never ship MCP servers with empty-default secrets; require explicit configuration for authentication.
- Audit your MCP server CORS policies —
Access-Control-Allow-Origin: *on a localhost endpoint defeats the purpose of local-only trust boundaries. - Consider binding MCP servers to loopback-only and adding Origin checks for any browser-reachable endpoint.
Sources: