
Prova de conceito de exploit para CVE-2026-39987, uma RCE pré-autenticação no endpoint WebSocket /terminal/ws do Marimo, fornecendo acesso não autenticado a shell PTY.
O Marimo <= 0.20.4 é afetado por uma vulnerabilidade de RCE pré-autenticação no endpoint WebSocket /terminal/ws.
O endpoint verifica o modo do aplicativo e o suporte a terminal, mas não valida a autenticação antes de aceitar a conexão WebSocket. Em seguida, ele cria um shell PTY, permitindo que um atacante não autenticado execute comandos com os privilégios do processo Marimo.
Diferente de outros endpoints WebSocket que chamam validate_auth(), o endpoint vulnerável do terminal aceita a conexão diretamente:
if app_state.mode != SessionMode.EDIT:
await websocket.close(...)
return
if not supports_terminal():
await websocket.close(...)
return
await websocket.accept()
child_pid, fd = pty.fork()
A verificação de autenticação ausente permite acesso não autenticado ao PTY.
<= 0.20.4O cliente CVE-2026-39987.py incluído conecta-se a:
/terminal/ws
Modo interativo:
python3 CVE-2026-39987.py -i
Comando único:
python3 CVE-2026-39987.py "id"
Configure o alvo substituindo DEFAULT_HOST no script.
A exploração bem-sucedida pode fornecer um shell PTY não autenticado e execução arbitrária de comandos como o usuário do servidor Marimo.