
Da RCE do Inspector MCPJam à root — CVE-2026-23744, divulgação de token do JupyterLab, execução de kernel e escalonamento de privilégios do OPSMCP
Este repositório destina-se exclusivamente à pesquisa de segurança autorizada, testes de penetração e fins educacionais. Não use as técnicas aqui descritas contra sistemas sem autorização explícita.
Do RCE no MCPJam Inspector ao root — CVE-2026-23744, divulgação do token do JupyterLab, execução de kernel e escalada de privilégios do OPSMCP.
Este repositório documenta uma cadeia de ataque Linux completa, de uma instância exposta do MCPJam Inspector ao acesso em nível de root.
A cadeia encadeia fragilidades em ferramentas de desenvolvimento, serviços locais, tratamento de credenciais e autorização de aplicações:
MCPJam Inspector
│ CVE-2026-23744
▼
RCE
│
▼
JupyterLab Token
│
▼
Jupyter Kernel
│
▼
User
│
▼
OPSMCP API
│
▼
Hidden Admin Tool
│
▼
Root Credential
│
▼
root
[!WARNING] Este repositório destina-se exclusivamente à pesquisa de segurança autorizada, testes de penetração e fins educacionais. Endereços-alvo, credenciais, tokens e outros valores específicos do ambiente ao longo deste documento foram ocultados ou substituídos por placeholders de laboratório.
O reconhecimento inicial concentra-se em identificar serviços expostos externamente.
nmap -sC -sV -oN nmap_initial.txt TARGET
Em seguida, pode ser realizada uma varredura TCP completa:
nmap -p- --min-rate 5000 -oN nmap_full.txt TARGET
Serviços externos relevantes:
| Porta | Serviço | Função |
|---|---|---|
| 22 | SSH | Administração remota |
| 6274 | MCPJam Inspector | Superfície de ataque inicial |
Serviços vinculados apenas ao localhost:
| Porta | Serviço | Privilégio |
|---|---|---|
| 8888 | JupyterLab | Usuário |
| 5000 | OPSMCP | root |
O MCPJam Inspector acessível externamente na porta 6274 torna-se o ponto de entrada inicial.
A instância exposta do MCPJam Inspector é afetada pela CVE-2026-23744.
O MCPJam Inspector é destinado principalmente a servir como interface de desenvolvimento e teste para servidores MCP. A vulnerabilidade torna-se particularmente perigosa quando essa interface é exposta a uma rede não confiável — um fluxo de configuração vulnerável permite que dados controlados pelo atacante alcancem um caminho de execução de comandos.
Remote Request
│
▼
MCP Server Configuration
│
▼
Command Execution
│
▼
Initial Shell
A vulnerabilidade afeta as versões do MCPJam Inspector até a 1.4.2, inclusive. Para testes autorizados, uma prova de conceito pública pode ser usada para validar a vulnerabilidade contra o ambiente-alvo.
Após a exploração bem-sucedida, confirme o contexto de execução:
id
whoami
hostname
Uma vez obtido o acesso inicial, os serviços locais tornam-se visíveis.
ss -tlnp
ps aux | grep -E 'jupyter|python|node'
Network
│
▼
MCPJam Inspector
:6274
│
▼
Initial RCE
│
┌─────────┴─────────┐
▼ ▼
JupyterLab OPSMCP
:8888/local :5000/local
│ │
▼ ▼
User root
A diferença de privilégio entre as duas aplicações internas é particularmente interessante.
O processo do JupyterLab foi iniciado com seu token de autenticação diretamente na linha de comando:
--ServerApp.token=<JUPYTER_TOKEN>
A linha de comando pode ser inspecionada por meio de:
ps aux | grep jupyter
# or
cat /proc/<PID>/cmdline
Isso demonstra um problema comum de gerenciamento de segredos:
Secret → Command-line argument → Process metadata → Local credential disclosure
O token recuperado fornece acesso à API Jupyter local.
O Jupyter expõe uma API REST para gerenciar kernels. Após autenticar com o token recuperado, um kernel pode ser criado por meio de:
POST /api/kernels
A resposta contém um UUID do kernel. Os kernels do Jupyter se comunicam por meio de WebSockets:
/api/kernels/<KERNEL_ID>/channels
O protocolo de mensagens do Jupyter usa uma mensagem execute_request para executar código Python:
{
"header": { "msg_type": "execute_request" },
"content": { "code": "<AUTHORIZED_LAB_CODE>" }
}
Isso estabelece a execução de Python sob a identidade do serviço Jupyter — neste ambiente, o kernel executa como Usuário.
MCPJam RCE → JupyterLab → User
Com um shell de usuário disponível, o próximo passo é examinar as aplicações instaladas localmente. A aplicação OPSMCP está localizada em:
/opt/opsmcp/
A revisão do código-fonte revela uma credencial de API embutida:
VALID_API_KEY = "<REDACTED_OPSMCP_API_KEY>"
A aplicação também mantém duas coleções de ferramentas:
Ferramentas visíveis
ops.system_statusops.list_servicesops.check_diskops.view_logsFerramentas ocultas
ops._admin_dumpops._debug_modeAs funções administrativas são particularmente interessantes porque não são retornadas pela enumeração normal de ferramentas.
Não documentado não significa inacessível.
O backend ainda registra as ferramentas ocultas e aceita seus nomes por meio do mecanismo genérico de execução de ferramentas.
A aplicação autentica as solicitações usando uma chave de API:
X-API-Key: <OPSMCP_API_KEY>
Uma vez autenticado, o endpoint de execução de ferramentas apenas verifica se a função solicitada existe — não se o chamador está autorizado a executá-la.
O que acontece:
API Key → Authenticated → Tool exists? → Execute
O que deveria acontecer:
API Key → Authenticated → Permission check → Allowed → Execute
└ Denied → 403
A função administrativa oculta pode acessar recursos sensíveis de propriedade do root.
A ferramenta administrativa aceita um alvo que descreve a informação solicitada. Um dos recursos suportados é a chave SSH do root:
{
"name": "ops._admin_dump",
"arguments": {
"target": "ssh_keys",
"confirm": true
}
}
A aplicação então lê a chave privada SSH de propriedade do root, o que é possível porque o OPSMCP executa como root e pode ler /root/*. A aplicação torna-se, portanto, uma primitiva de divulgação de credenciais.
Após recuperar a credencial SSH do laboratório autorizado, armazene-a com permissões restritivas:
chmod 600 <ROOT_KEY>
Verifique o contexto de autenticação resultante:
whoami
id
Nível de privilégio final: root 🎉
┌──────────────────────────────┐
│ MCPJam Inspector │
│ TCP/6274 │
└──────────────┬───────────────┘
│ CVE-2026-23744
▼
┌──────────────────────────────┐
│ Initial RCE │
└──────────────┬───────────────┘
▼
┌──────────────────────────────┐
│ JupyterLab │
│ 127.0.0.1:8888 │
└──────────────┬───────────────┘
│ Token disclosure
▼
┌──────────────────────────────┐
│ Jupyter Kernel │
│ WebSocket RCE │
└──────────────┬───────────────┘
▼
User
│ Source review
▼
┌──────────────────────────────┐
│ OPSMCP │
│ 127.0.0.1:5000 │
│ root │
└──────────────┬───────────────┘
│ API key + hidden tool
▼
┌──────────────────────────────┐
│ Root Credential Leak │
└──────────────┬───────────────┘
▼
root
| Sistema |
|---|
01 — Ferramentas de desenvolvimento são superfície de ataque Ferramentas projetadas para desenvolvimento local podem tornar-se vulnerabilidades críticas quando expostas a redes não confiáveis.
02 — Tokens do Jupyter são credenciais poderosas O acesso a um token do Jupyter pode fornecer muito mais do que acesso à interface — as APIs de kernel podem fornecer execução arbitrária de código.
03 — Oculto não significa seguro Um endpoint não documentado não é um mecanismo de autorização.
04 — O código-fonte é valioso no pós-exploração O código-fonte da aplicação pode revelar imediatamente mecanismos de autenticação, segredos, funcionalidades ocultas e limites de privilégio.
05 — O privilégio mínimo pode quebrar cadeias de ataque Se o OPSMCP estivesse sendo executado como uma conta de serviço sem privilégios, o impacto final teria sido significativamente reduzido.
Este repositório destina-se exclusivamente à pesquisa de segurança autorizada, testes de penetração e fins educacionais. Não use as técnicas aqui descritas contra sistemas sem autorização explícita.
⚡ MCPJam → RCE → Jupyter → User → OPSMCP → root ⚡
| Etapa | Estágio |
|---|
| 1 | MCPJam Inspector exposto na rede |
| 2 | CVE-2026-23744 explorada |
| 3 | RCE inicial obtido |
| 4 | Token do JupyterLab divulgado |
| 5 | Execução do kernel Jupyter |
| 6 | Shell em nível de usuário |
| 7 | Revisão do código-fonte do OPSMCP |
| 8 | Credencial de API hardcoded descoberta |
| 9 | Funcionalidade administrativa oculta abusada |
| 10 | Credencial de root divulgada |
| 11 | root |
| # | Fragilidade | Impacto |
|---|
| 1 | MCPJam Inspector exposto | Superfície de ataque remota |
| 2 | CVE-2026-23744 | RCE inicial |
| 3 | Token em argumentos de processo | Divulgação de credenciais |
| 4 | Acesso ao kernel Jupyter | Execução de código em nível de usuário |
| 5 | Código-fonte da aplicação legível | Descoberta de credenciais |
| 6 | Chave de API OPSMCP hardcoded | Bypass de autenticação da API |
| 7 | Funcionalidade administrativa oculta | Operação privilegiada |
| 8 | OPSMCP executando como root | Comprometimento total do sistema |
| Fique atento a |
|---|
| MCPJam | Alterações inesperadas de configuração · processos filhos suspeitos · clientes remotos incomuns |
| JupyterLab | Uso inesperado de token · criação inesperada de kernels · conexões WebSocket anormais · processos de shell gerados por kernels |
| OPSMCP | Invocação de ferramentas não documentadas · solicitações relacionadas a credenciais · clientes de API inesperados · operações administrativas |
| SSH | Logins de root inesperados · novas chaves SSH · fontes de autenticação incomuns |