
Proof-of-Concept-Exploit für CVE-2026-39987, eine Pre-Authentication-RCE im /terminal/ws-WebSocket-Endpunkt von Marimo, die nicht authentifizierten PTY-Shell-Zugriff ermöglicht.
Marimo <= 0.20.4 ist von einer Pre-Authentication-RCE-Schwachstelle im WebSocket-Endpunkt /terminal/ws betroffen.
Der Endpunkt prüft den Anwendungsmodus und die Terminalunterstützung, validiert jedoch die Authentifizierung nicht, bevor die WebSocket-Verbindung akzeptiert wird. Anschließend erstellt er eine PTY-Shell, die es einem nicht authentifizierten Angreifer ermöglicht, Befehle mit den Rechten des Marimo-Prozesses auszuführen.
Im Gegensatz zu anderen WebSocket-Endpunkten, die validate_auth() aufrufen, akzeptiert der anfällige Terminal-Endpunkt die Verbindung direkt:
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()
Die fehlende Authentifizierungsprüfung ermöglicht nicht authentifizierten Zugriff auf die PTY.
<= 0.20.4Der enthaltene CVE-2026-39987.py-Client verbindet sich mit:
/terminal/ws
Interaktiver Modus:
python3 CVE-2026-39987.py -i
Einzelner Befehl:
python3 CVE-2026-39987.py "id"
Konfigurieren Sie das Ziel, indem Sie DEFAULT_HOST im Skript ersetzen.
Eine erfolgreiche Ausnutzung kann eine nicht authentifizierte PTY-Shell und die Ausführung beliebiger Befehle mit dem Benutzer des Marimo-Servers ermöglichen.