
Grafana-Scanner mit allen öffentlichen CVEs, die ich in einem Skript zusammengefasst habe, um das Testen von Grafana zu erleichtern.
Ein Befehlszeilen-Schwachstellenscanner für Grafana. Er ermittelt die installierte Grafana-Version per Fingerprinting, führt eine Reihe versionsabhängiger CVE-Prüfungen durch, auditigt häufige Konfigurationsschwächen, speichert Ergebnisse in einer lokalen Datenbank und kann sie über ein kleines Web-Dashboard bereitstellen.
Dieses Tool sendet Anfragen an Grafana-Instanzen und versucht bei einigen Prüfungen bekannte Exploit-Pfade (Path Traversal, SQL-Injection, SSRF). Führen Sie es nur gegen Systeme aus, die Ihnen gehören oder für die Sie eine schriftliche Erlaubnis zum Testen haben. Unbefugtes Scannen kann in Ihrem Zuständigkeitsbereich gegen Gesetze zur Computer-Sabotage verstoßen.
requestsflask (nur für --serve erforderlich)pip install -r requirements.txt
# Ein einzelnes Ziel scannen
python scanner.py -u https://grafana.example.com
# Eine Liste von URLs aus einer Datei scannen
python scanner.py -f targets.txt -o report
# Grafana-Instanzen in einer gemischten URL-Liste erkennen und dann scannen
python scanner.py --auto-search urls.txt -o discovery
# Ergebnisse in einer Datenbank speichern und im Dashboard anzeigen
python scanner.py -f targets.txt --db vulndb.json
python scanner.py --serve --db vulndb.json
| Option | Beschreibung |
|---|---|
-u, --url | Ein einzelnes Ziel-URL scannen |
-f, --file | Ziele scannen, die zeilenweise in einer Datei aufgelistet sind |
--auto-search DATEI | Grafana in einer URL-Liste erkennen, dann erkannte Instanzen scannen |
-o, --output BASIS | Basisname für JSON/HTML/CSV-Berichtsdateien |
--timeout N | Timeout pro Anfrage in Sekunden (Standard: 10) |
--threads N | Gleichzeitige Scan-Threads (Standard: 5) |
--db DATEI | JSON-Schwachstellendatenbank am angegebenen Pfad aktivieren |
--serve [PORT] | Flask-Web-Dashboard starten (Standardport 8080) |
--host | Adresse, an die das Dashboard gebunden wird (Standard: 127.0.0.1) |
--dashboard-token TOKEN | Dieses Bearer-Token für alle Dashboard-Routen verlangen |
--auth-token | Bearer-Token zum Scannen authentifizierter Endpunkte |
--auth-user / --auth-pass | Basisauthentifizierung für das Scannen |
--no-ssl-verify | TLS-Zertifikatsprüfung deaktivieren (gibt eine Warnung aus) |
-v, --verbose | Details zu jeder Prüfung ausgeben |
--no-banner | Startkopfzeile unterdrücken |
--no-ssl-verify nur
für interne Hosts mit selbstsignierten Zertifikaten; dabei wird eine Warnung
ausgegeben, da Anmeldedaten andernfalls einem Abfangen ausgesetzt sein
könnten.--dashboard-token setzen. Wenn das Dashboard an eine nicht-lokale
Schnittstelle gebunden ist, müssen Sie ein Token setzen. Alle
zustandsändernden Anfragen erfordern außerdem ein CSRF-Token.Mit -o schreibt der Scanner BASIS.json, BASIS.html und BASIS.csv. Der
HTML-Bericht neutralisiert javascript:/data:/vbscript:-URIs, die aus
einer bösartigen Zielantwort stammen könnten.
Mit --db werden Ergebnisse in einer JSON-Datei gespeichert, die atomar
geschrieben wird: Eine .bak-Kopie des vorherigen Zustands wird aufbewahrt,
und eine Datei, die nicht geparst werden kann, wird nach
.corrupt-<Zeitstempel> verschoben, statt stillschweigend verworfen zu
werden.
Der Scanner führt versionsabhängige CVE-Prüfungen sowie
Konfigurations-Audits durch (Sicherheits-Header, CORS, anonymer Zugriff,
Selbstregistrierung, Plugin-Analyse, offengelegte Metriken). Die vollständige
CVE-Liste und Hinweise zu den Erkennungsmethoden finden Sie in
docs/vulnerabilities.md.
scanner.py — Engine, Prüfungen, Datenbank, Web-Dashboard, CLIdocs/usage.md — Scan-Modi und Arbeitsabläufedocs/vulnerabilities.md — CVE-Referenzdocs/architecture.md — interne Struktur und Datenflusstests/ — Testsammlungmake test # Testsammlung ausführen
make lint # ruff + flake8
Die CI-Pipeline führt die Tests und Linter auf Python 3.9–3.12 aus und baut das Docker-Image.
MIT. Siehe LICENSE.