Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-39987 — Kit de detecção e exploração para CVE-2026-39987, um RCE pré-autenticação em notebooks Marimo. Inclui scanner em Python e script NSE do Nmap para identificar instâncias vulneráveis por meio de verificações de endpoint WebSocket. | Kitploit
Ferramentas/GitHubGitHub/keraattin/cve-2026-39987
Scanners de VulnerabilidadesAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebColeta de InformaçõesSegurança WebSegurança de RedeTestes de Penetração
GitHubkeraattin/cve-2026-39987

CVE-2026-39987

Kit de detecção e exploração para CVE-2026-39987, um RCE pré-autenticação em notebooks Marimo. Inclui scanner em Python e script NSE do Nmap para identificar instâncias vulneráveis por meio de verificações de endpoint WebSocket.

128há 6 mesesAinda não revisado
Ver Repositório

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-39987 — Execução Remota de Código Pré-Autenticada no Notebook Python Marimo

CVE-2026-39987 CVSS 9.3 CWE-306 Marimo Pre-Auth RCE

TL;DR

Uma vulnerabilidade de execução remota de código pré-autenticada no Marimo, um notebook Python de código aberto para ciência de dados e IA/ML. O endpoint WebSocket do terminal (/terminal/ws) ignora completamente a validação de autenticação, enquanto o endpoint vizinho do notebook (/ws) a aplica corretamente. Um atacante não autenticado pode se conectar a /terminal/ws e obter um shell PTY interativo completo no sistema host sem nenhuma credencial.

Explorada ativamente em menos de 10 horas após a divulgação. Atacantes roubaram credenciais AWS em menos de 3 minutos.

Afeta Marimo <= 0.20.4. Corrigido no Marimo 0.23.0.


Sumário

  • Fatos Rápidos
  • O que é o Marimo?
  • Análise Aprofundada da Vulnerabilidade
    • Os Dois Endpoints WebSocket
    • A Verificação de Autenticação Ausente
    • O Ataque: Do Aviso às Chaves AWS em 3 Minutos
  • Análise de Impacto
  • Versões Afetadas
  • O Panorama Geral: Cadeia de Ferramentas de IA/ML Sob Ataque
  • Detecção
    • Scanner Python
    • Script Nmap NSE
    • Verificação Manual
  • Indicadores de Comprometimento
  • Remediação
  • Referências
  • Autor

Fatos Rápidos

CampoDetalhe
ID CVECVE-2026-39987
FornecedorProjeto Marimo
ProdutoMarimo (Notebook Python)
Versões Afetadas<= 0.20.4
CVSS v3.19.3 (Crítico)
CWECWE-306 — Autenticação Ausente para Função Crítica
Vetor de AtaqueRede
AutenticaçãoNenhuma necessária
Interação do UsuárioNenhuma
Maturidade do ExploitExplorado ativamente na natureza
Tempo até a Exploração~10 horas após a divulgação
Corrigido EmMarimo 0.23.0

O que é o Marimo?

O Marimo é um notebook Python reativo de código aberto, projetado como uma alternativa moderna ao Jupyter. Ele é construído para ciência de dados, experimentação em IA/ML e análise interativa de dados. Seus principais recursos incluem rastreamento automático de dependências, execução reproduzível e uma experiência de desenvolvimento mais limpa em comparação aos notebooks tradicionais.

O Marimo está ganhando rápida adoção na comunidade Python e de IA/ML, especialmente entre profissionais que desejam fluxos de trabalho de notebook mais estruturados do que o Jupyter oferece.

Como todos os ambientes de notebook, as instâncias do Marimo normalmente têm acesso a recursos sensíveis: credenciais de nuvem (AWS, GCP, Azure), strings de conexão de banco de dados, chaves de API para serviços de IA (OpenAI, Anthropic, etc.) e acesso à rede interna. Diferentemente de aplicações web tradicionais, os notebooks são projetados para executar código arbitrário. Esse é o seu propósito central.

Essa combinação torna qualquer bypass de autenticação em um ambiente de notebook particularmente devastador.``` Typical Marimo Deployment:

┌──────────────┐ ┌────────────────────────────────┐ │ │ HTTP │ Marimo Server │ │ Browser │────────>│ │ │ (User) │ │ ┌──────────────────────────┐ │ │ │<────────│ │ /ws (Notebook) │ │ └──────────────┘ WS │ │ ✅ validate_auth() │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ /terminal/ws │ │ │ │ ❌ NO AUTH CHECK │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ Python Environment │ │ │ │ .env files │ │ │ │ AWS credentials │ │ │ │ API keys │ │ │ └──────────────────────────┘ │ └────────────────────────────────┘

---

## Análise Aprofundada da Vulnerabilidade

### Os Dois Endpoints WebSocket

O servidor do Marimo implementa vários endpoints WebSocket para diferentes funcionalidades. A diferença crítica entre os dois endpoints principais é a presença (ou ausência) de uma verificação de autenticação:```
  Authentication Flow Comparison:

  /ws (Notebook WebSocket):
  ┌─────────┐    ┌───────────────┐    ┌──────────┐    ┌───────────┐
  │ Connect │───>│ validate_auth │───>│  Accept  │───>│ Notebook  │
  └─────────┘    └───────┬───────┘    └──────────┘    └───────────┘
                         │
                    ❌ Reject if
                    not authenticated

  /terminal/ws (Terminal WebSocket):
  ┌─────────┐    ┌───────────────┐    ┌──────────┐    ┌───────────┐
  │ Connect │───>│ Check mode &  │───>│  Accept  │───>│ PTY Shell │
  └─────────┘    │ platform only │    └──────────┘    └───────────┘
                 └───────────────┘
                 ⚠️ No auth check!
                 Anyone gets a shell!

A Verificação de Autenticação Ausente

O endpoint do notebook (/ws) chama corretamente validate_auth() para verificar a identidade do usuário antes de aceitar conexões WebSocket. Este é o comportamento de segurança esperado.

O endpoint do terminal (/terminal/ws) apenas verifica se o servidor está em modo de execução e se a plataforma suporta a funcionalidade de terminal. Ele nunca chama validate_auth(). Após passar por essas verificações básicas, ele aceita a conexão e cria uma sessão completa de PTY (pseudo-terminal).```python

/ws (Notebook) — CORRECT implementation

async def websocket_connect(self, message): await self.validate_auth() # ✅ Checks authentication await self.accept() # ... notebook communication

/terminal/ws (Terminal) — VULNERABLE implementation

async def websocket_connect(self, message): if not self.is_running_mode(): # Only checks mode await self.close() return if not self.is_platform_supported(): # Only checks platform await self.close() return await self.accept() # ❌ No auth! Anyone gets a shell # ... PTY shell creation

Este é o **CWE-306: Ausência de Autenticação para Função Crítica**. O endpoint mais perigoso do servidor (aquele que fornece um shell interativo) não possui autenticação alguma.

### O Ataque: De Advisory a Chaves AWS em 3 Minutos
Baixar ferramenta