
Proof-of-concept exploit per CVE-2026-39987, una RCE pre-autenticazione nell'endpoint WebSocket /terminal/ws di Marimo, che fornisce accesso shell PTY non autenticato.
Marimo <= 0.20.4 è affetto da una vulnerabilità RCE pre-autenticazione nell'endpoint WebSocket /terminal/ws.
L'endpoint controlla la modalità dell'applicazione e il supporto del terminale, ma non valida l'autenticazione prima di accettare la connessione WebSocket. Successivamente crea una shell PTY, consentendo a un attaccante non autenticato di eseguire comandi con i privilegi del processo Marimo.
A differenza di altri endpoint WebSocket che chiamano validate_auth(), l'endpoint terminale vulnerabile accetta la connessione direttamente:
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()
La mancanza del controllo di autenticazione consente l'accesso non autenticato alla PTY.
<= 0.20.4Il client incluso CVE-2026-39987.py si connette a:
/terminal/ws
Modalità interattiva:
python3 CVE-2026-39987.py -i
Comando singolo:
python3 CVE-2026-39987.py "id"
Configurare il target sostituendo DEFAULT_HOST nello script.
Uno sfruttamento riuscito può fornire una shell PTY non autenticata e l'esecuzione arbitraria di comandi come utente del server Marimo.