highCVSS 7.5Vulnerability

CVE-2026-49353

## Summary The fix for CVE-2026-46339 (unauthenticated RCE via unprotected MCP plugin routes) introduced a local-only access gate in `src/dashboardGuard.js` that restricts spawn-capable routes (`/api/mcp/*`, `/api/tunnel/*`, `/api/cli-tools/*`) to loopback requests. The gate determines "local" by inspecting the `Host` and `Origin` HTTP headers rather than the TCP source address. When 9router is deployed behind a reverse proxy, tunnel (Cloudflare Tunnel, Tailscale — both natively supported), or is subject to DNS rebinding, these headers are attacker-controlled, allowing the local-only gate to be bypassed. A second factor (CLI token or JWT cookie) is required by `canAccessLocalOnlyRoute()`, but the CLI token is a deterministic HMAC of the machine ID (`getConsistentMachineId`), which is stable and predictable on cloud VMs. If the attacker can obtain or guess the machine ID (e.g., via another information disclosure, or on shared-tenant infrastructure), the full chain to MCP child process stdin injection is reachable. This is a variant / incomplete fix of CVE-2026-46339 — the same attack surface (remote → MCP child process stdin) remains reachable under specific but realistic deployment configurations. ## Root Cause `isLocalRequest()` at `src/dashboardGuard.js:93-101`: ```javascript function isLocalRequest(request) { if (!isLoopbackHostname(request.headers.get("host"))) return false; const origin = request.headers.get("origin"); if (origin) { try { if (!isLoopbackHostname(new URL(origin).hostname)) return false; } catch { return false; } } return true; } ``` This function trusts `Host` and `Origin` headers as proof of local origin. Both are attacker-controlled in any proxied deployment. The `LOOPBACK_HOSTS` set (`localhost`, `127.0.0.1`, `::1`) is checked against these headers, not against the actual connection source IP. ## Attack Scenario ### Scenario 1: Cloudflare Tunnel / Tailscale Funnel 9router natively supports Cloudflare Tunnel a

Properties

severity
high
summary
9router has an Incomplete Fix: Local-Only Access Gate Bypass in 9router via Host Header SpoofING
epss_score
0.00231
cvss_score
7.5
ghsa_published
2026-07-02T21:13:19Z
source_url
https://github.com/advisories/GHSA-6g2f-w7g3-77vf
ghsa_updated
2026-07-06T10:44:18Z
ghsa_id
GHSA-6g2f-w7g3-77vf
cve_id
CVE-2026-49353
cvss_vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N
is_ghsa_only
false
epss_percentile
0.14195

Related Entities (5)

ENRICHED_BY (1)

[Source]FIRST EPSS

VULNERABLE_TO (1)

[Software]npm/9router

AFFECTS (1)

[Software]npm/9router

HAS_WEAKNESS (1)

[Weakness]Authentication Bypass by Spoofing

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-49353 (CVSS 7.5) — Ninja Signal Threat Intelligence | Ninja Signal