Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-39987 — Erkennungs- und Exploitation-Toolkit für CVE-2026-39987, eine Pre-Auth-RCE in Marimo-Notebooks. Enthält einen Python-Scanner und ein Nmap-NSE-Skript zur Identifizierung verwundbarer Instanzen über WebSocket-Endpunktprüfungen. | Kitploit
Tools/GitHubGitHub/keraattin/cve-2026-39987
SchwachstellenscannerSchwachstellenanalyseExploitationWebanwendungs-ExploitationInformationsbeschaffungWebsicherheitNetzwerksicherheitPenetrationstests
GitHubkeraattin/cve-2026-39987

CVE-2026-39987

Erkennungs- und Exploitation-Toolkit für CVE-2026-39987, eine Pre-Auth-RCE in Marimo-Notebooks. Enthält einen Python-Scanner und ein Nmap-NSE-Skript zur Identifizierung verwundbarer Instanzen über WebSocket-Endpunktprüfungen.

117vor 5 MonatenNoch nicht geprüft
Repository anzeigen

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 Python Notebook Pre-Authenticated Remote Code Execution

CVE-2026-39987 CVSS 9.3 CWE-306 Marimo Pre-Auth RCE

TL;DR

Eine Remote-Code-Execution-Schwachstelle ohne Authentifizierung in Marimo, einem Open-Source-Python-Notebook für Data Science und KI/ML. Der Terminal-WebSocket-Endpunkt (/terminal/ws) überspringt die Authentifizierungsprüfung vollständig, während der benachbarte Notebook-Endpunkt (/ws) diese korrekt durchsetzt. Ein nicht authentifizierter Angreifer kann sich mit /terminal/ws verbinden und ohne jegliche Anmeldedaten eine vollständige interaktive PTY-Shell auf dem Hostsystem erhalten.

Innerhalb von 10 Stunden nach der Offenlegung wurde die Schwachstelle bereits in freier Wildbahn ausgenutzt. Angreifer stahlen AWS-Anmeldedaten in weniger als 3 Minuten.

Betrifft Marimo <= 0.20.4. Behoben in Marimo 0.23.0.


Inhaltsverzeichnis

  • Kurzfakten
  • Was ist Marimo?
  • Detaillierte Analyse der Schwachstelle
    • Die zwei WebSocket-Endpunkte
    • Die fehlende Authentifizierungsprüfung
    • Der Angriff: Von der Ankündigung zu AWS-Keys in 3 Minuten
  • Auswirkungsanalyse
  • Betroffene Versionen
  • Das große Ganze: KI/ML-Toolchain unter Beschuss
  • Erkennung
    • Python-Scanner
    • Nmap-NSE-Skript
    • Manuelle Überprüfung
  • Indikatoren für eine Kompromittierung
  • Behebung
  • Referenzen
  • Autor

Kurzfakten

FeldDetail
CVE-IDCVE-2026-39987
AnbieterMarimo Project
ProduktMarimo (Python-Notebook)
Betroffene Versionen<= 0.20.4
CVSS v3.19.3 (Kritisch)
CWECWE-306 — Fehlende Authentifizierung für kritische Funktion
AngriffsvektorNetzwerk
AuthentifizierungKeine erforderlich
BenutzerinteraktionKeine
Reifegrad des ExploitsAktiv in freier Wildbahn ausgenutzt
Zeit bis zur Ausnutzung~10 Stunden nach Offenlegung
Behoben inMarimo 0.23.0

Was ist Marimo?

Marimo ist ein Open-Source-reaktives Python-Notebook, das als moderne Alternative zu Jupyter entwickelt wurde. Es ist für Data Science, KI/ML-Experimente und interaktive Datenanalyse konzipiert. Zu den wichtigsten Funktionen gehören automatische Abhängigkeitsverfolgung, reproduzierbare Ausführung und eine sauberere Entwicklererfahrung im Vergleich zu herkömmlichen Notebooks.

Marimo gewinnt in der Python- und KI/ML-Community schnell an Bedeutung, insbesondere bei Praktikern, die strukturiertere Notebook-Workflows wünschen, als Jupyter sie bietet.

Wie alle Notebook-Umgebungen haben Marimo-Instanzen typischerweise Zugriff auf sensible Ressourcen: Cloud-Anmeldedaten (AWS, GCP, Azure), Datenbank-Verbindungsstrings, API-Keys für KI-Dienste (OpenAI, Anthropic usw.) sowie internen Netzwerkzugriff. Im Gegensatz zu herkömmlichen Webanwendungen sind Notebooks darauf ausgelegt, beliebigen Code auszuführen. Das ist ihr Kernzweck.

Diese Kombination macht jede Authentifizierungsumgehung in einer Notebook-Umgebung besonders verheerend.``` Typical Marimo Deployment:

┌──────────────┐ ┌────────────────────────────────┐ │ │ HTTP │ Marimo Server │ │ Browser │────────>│ │ │ (User) │ │ ┌──────────────────────────┐ │ │ │<────────│ │ /ws (Notebook) │ │ └──────────────┘ WS │ │ ✅ validate_auth() │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ /terminal/ws │ │ │ │ ❌ NO AUTH CHECK │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ Python Environment │ │ │ │ .env files │ │ │ │ AWS credentials │ │ │ │ API keys │ │ │ └──────────────────────────┘ │ └────────────────────────────────┘

---

## Schwachstellen-Tiefenanalyse

### Die beiden WebSocket-Endpunkte

Der Marimo-Server implementiert mehrere WebSocket-Endpunkte für verschiedene Funktionen. Der entscheidende Unterschied zwischen den beiden Hauptendpunkten ist das Vorhandensein (oder Fehlen) einer Authentifizierungsprüfung:```
  Authentication Flow Comparison:

  /ws (Notebook WebSocket):
  ┌─────────┐    ┌───────────────┐    ┌──────────┐    ┌───────────┐
  │ Connect │───>│ validate_auth │───>│  Accept  │───>│ Notebook  │
  └─────────┘    └───────┬───────┘    └──────────┘    └───────────┘
                         │
                    ❌ Reject if
                    not authenticated

  /terminal/ws (Terminal WebSocket):
  ┌─────────┐    ┌───────────────┐    ┌──────────┐    ┌───────────┐
  │ Connect │───>│ Check mode &  │───>│  Accept  │───>│ PTY Shell │
  └─────────┘    │ platform only │    └──────────┘    └───────────┘
                 └───────────────┘
                 ⚠️ No auth check!
                 Anyone gets a shell!

Die fehlende Authentifizierungsprüfung

Der Notebook-Endpunkt (/ws) ruft korrekt validate_auth() auf, um die Identität des Benutzers zu überprüfen, bevor WebSocket-Verbindungen akzeptiert werden. Dies ist das erwartete Sicherheitsverhalten.

Der Terminal-Endpunkt (/terminal/ws) prüft lediglich, ob sich der Server im laufenden Modus befindet und ob die Plattform Terminalfunktionen unterstützt. Er ruft niemals validate_auth() auf. Nachdem diese grundlegenden Prüfungen bestanden sind, akzeptiert er die Verbindung und erstellt eine vollständige PTY-Sitzung (Pseudo-Terminal).```python

/ws (Notebook) — CORRECT implementation

async def websocket_connect(self, message): await self.validate_auth() # ✅ Checks authentication await self.accept() # ... notebook communication

/terminal/ws (Terminal) — VULNERABLE implementation

async def websocket_connect(self, message): if not self.is_running_mode(): # Only checks mode await self.close() return if not self.is_platform_supported(): # Only checks platform await self.close() return await self.accept() # ❌ No auth! Anyone gets a shell # ... PTY shell creation

Dies ist **CWE-306: Fehlende Authentifizierung für kritische Funktionen**. Der gefährlichste Endpunkt auf dem Server (derjenige, der eine interaktive Shell bereitstellt) hat keinerlei Authentifizierung.

### Der Angriff: Von der Beratung zu AWS-Keys in 3 Minuten
Tool herunterladen