Loading...
Skip to main content

CVE-2026-48814 — Vulnerability in network-ai — CVE Details

CRITICAL

Network-AI: CVE-2026-46701 fix incomplete — empty default secret still authorizes all requests

Published June 19, 2026Updated July 8, 2026Source: osv

Summary

## Advisory / Disclosure # Network-AI — CVE-2026-46701 fix is incomplete: the "Empty Default Secret" unauth path survives **Target:** Jovancoding/Network-AI (npm `network-ai`), **latest v5.7.1** **Status:** the advisory ("Unauthenticated Cross-Origin MCP Tool Invocation via Empty Default Secret") named three flaws. The fix (5.4.5) closed the **CORS** flaw (`Access-Control-Allow-Origin` is now set only for localhost origins), but left the **empty-default-secret** flaw the title is about: the SSE MCP server still defaults to an empty secret, `_isAuthorized()` still returns `true` when the secret is empty, and a non-loopback bind only **warns**. So the server still runs **fully unauthenticated by default** — any non-browser caller (curl, SSRF, or a `0.0.0.0` bind) can invoke all 22 MCP tools (`config_set`, `agent_spawn`, `blackboard_write`, `token_*`) with no credentials. **Class:** CWE-306/CWE-862 Missing Authentication — incomplete fix. **Methodology:** M1 incomplete-fix audit (anchor = the 5.4.5 fix; sibling-walk on latest v5.7.1, executed). **Severity:** High (matches parent; the browser amplifier is removed, so exploitation now needs non-browser reach — SSRF or a non-loopback bind, which the fix only warns about). ## What the fix did and didn't do (verified on latest v5.7.1) | advisory flaw | latest v5.7.1 | |---|---| | wildcard CORS (`ACAO: *`) | **FIXED** — `lib/mcp-transport-sse.ts` sets `ACAO` only when `origin` matches `^https?://(localhost\|127\.0\.0\.1)(:\d+)?$` | | empty default secret | **NOT FIXED** — `bin/mcp-server.ts`: `secret: process.env['NETWORK_AI_MCP_SECRET'] ?? ''` | | `_isAuthorized` open on empty secret | **NOT FIXED** — `if (!this._opts.secret) return true;` | | require secret / refuse unauth bind | **NOT DONE** — `listen()` only `process.stderr.write('… WARNING …')` on non-loopback bind, then listens anyway | The advisory's remediation #1 ("Require a non-empty secret at startup … `process.exit(1)`") was not implemented. ## PoC (executed against the latest source, v5.7.1) — `poc/legend-networkai-empty-secret.ts` Instantiates the real `McpSseServer` from the latest `lib/` with a mock bridge and the **default (empty) secret**, then issues requests (run-log `poc/run-log.txt`): ``` POST /mcp no-auth, no-origin (curl/SSRF) -> HTTP 200, dispatched=true body: {"jsonrpc":"2.0","id":1,"result":{"executed":true,"tool":"config_set"}} POST /mcp Origin: evil.example.com -> ACAO=undefined (CORS half fixed) ``` The no-auth request passes `_isAuthorized` and reaches `handleRPC` (tool dispatched) — i.e. unauthenticated tool invocation persists on the latest release; only the browser-CORS read amplifier was removed. Run: from a v5.7.1 checkout, `npm i` then `npx ts-node --transpile-only poc/legend-networkai-empty-secret.ts`. ## Recommended fix Implement the advisory's remediation #1: refuse to start SSE mode with an empty secret (unless `--stdio`), and/or change `_isAuthorized` to fail closed (an empty configured secret should mean "deny", not "allow"). The CORS allowlist alone does not authenticate non-browser callers. ## Precondition / honesty With CORS now localhost-only, the drive-by *browser* attack is mitigated. The residual requires a non-browser path to the port: an SSRF on the host, or the operator binding to a non-loopback address (Docker/remote), which the fix only warns about. The empty secret remains the shipped default and `_isAuthorized` still authorizes it. ## Credits @Kai Aizen / @SnailSploit — https://snailsploit.com

Advisory Timeline

  • First published June 19, 2026 (115 days ago).
  • Last revised July 8, 2026 — 19 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

npm
Update network-ai to 5.7.2 or later
npm install network-ai@5.7.2

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: npm (1).

PackageEcosystemAffectedFixed In
network-ai
npm
All versions5.7.2

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 9.1 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

Frequently Asked Questions

What is CVE-2026-48814?
Network-AI: CVE-2026-46701 fix incomplete — empty default secret still authorizes all requests This vulnerability has been assigned a severity rating of CRITICAL (CVSS score: 9.1/10).
How do I check if my project is affected by CVE-2026-48814?
CVE-2026-48814 affects network-ai. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-48814 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
9.1

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-r78r-rwrf-rjwp

Related CVEs

  • CVE-2026-54051
    CRITICAL

    Network-AI: Improper Neutralization of Special Elements used in an OS Command

  • CVE-2026-107722
    CRITICAL

    fast-jwt: Incomplete patch of CVE-2026-34950: Non-whitespace key-prefix re-enables RSA→HS256 algorithm confusion

  • CVE-2026-108261
    CRITICAL

    TinaCMS admin preview iframe loads an attacker-controlled origin from the URL fragment

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies