
Proof-of-Concept-Exploit für CVE-2026-39987, eine Pre-Authentication-RCE in Marimos /terminal/ws-WebSocket-Endpunkt, die ohne Anmeldedaten eine interaktive Shell ermöglicht.
CVSS 4.0: 9.3 (Kritisch) · AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H
Betrifft: marimo <= 0.20.4 · Behoben: 0.23.0 · CWE-306 (Fehlende Authentifizierung)
Advisory: GHSA-2679-6mx9-h9xc · Fix: marimo-team/marimo@c24d480
Der WebSocket-Endpunkt /terminal/ws (marimo/_server/api/endpoints/terminal.py)
prüft nur den Sitzungsmodus (EDIT) und die Plattformunterstützung, bevor er die
Verbindung annimmt und pty.fork() aufruft. Er enthält weder einen @requires(...)-
Dekorator noch einen validate_auth()-Aufruf.
Vergleichsmessung in 0.20.4:
@requires(...) über 18 Endpunkte./ws (Notebook) -> 2 Aufrufe von .validate_auth()terminal.py -> 0 @requires, 0 validate_auth. <-- der Fehler.Die AuthBackend-Middleware schützt HTTP und den /ws-Websocket, aber
/terminal/ws akzeptiert die Verbindung ohne Cookie und ohne Token und forkt eine
PTY-Shell mit den Rechten des marimo-Prozesses.
marimo edit ...), was der Standardmodus des Editors ist.pty-Unterstützung (Linux/macOS; Windows und Pyodide sind nicht betroffen).Ein Angreifer, der einen marimo edit-Server über das Netzwerk erreichen kann
(häufig bei Remote-/Container-Deployments, oft als root laufend), erhält eine
interaktive Shell ohne Authentifizierung: Diebstahl von Anmeldedaten (cat .env),
laterale Bewegung, Bereitstellung von Malware. In freier Wildbahn ausgenutzt < 10 h
nach Offenlegung; am 2026-04-23 in CISA's KEV-Katalog aufgenommen.
pip install "marimo==0.20.4" websockets
marimo edit demo.py --headless --port 2718 --token --token-password SECRET
python exploit.py ws://127.0.0.1:2718 "id; cat /etc/passwd"
exploit.py sendet kein Token, kein Cookie und keinen Authorization-Header. Es sendet
den Befehl als reinen Text + "\r" (Enter), genau wie ein Benutzer ihn im Terminal eingeben würde.
/ws -> 403 (Authentifizierung FUNKTIONIERT)./terminal/ws OHNE Token -> AKZEPTIERT. Auf dem Server ausgeführt:
uid=1000() gid=1000() ...
Linux ...
und schrieb /tmp/cve_2026_39987_proof.txt -> RCE bestätigt.Upgrade auf marimo >= 0.23.0. Vorübergehende Abhilfe: marimo edit nicht
unvertrauenswürdigen Netzwerken aussetzen; den Editor hinter einen authentifizierten
Proxy stellen; ihn unprivilegiert / in einem Container ohne Geheimnisse ausführen.
Nur für autorisierte Sicherheitstests und Bildungszwecke. Führen Sie es nur gegen Systeme aus, die Ihnen gehören oder für die Sie eine ausdrückliche Testgenehmigung haben.