Как стать автором
Обновить
90.1
Deiteriy Lab
Делаем пентесты

Обход аутентификации и способы выполнения произвольного кода в ZABBIX

Время на прочтение4 мин
Количество просмотров11K
Источник:https://eternalhost.net/wp-content/uploads/2020/02/0-Sistema-Zabbix-.png
Источник:https://eternalhost.net/wp-content/uploads/2020/02/0-Sistema-Zabbix-.png

В этой статье мы поговорим о некоторых атаках на систему мониторинга Zabbix и рассмотрим сценарии удаленного выполнения кода (RCE).

Zabbix- это свободная система мониторинга и отслеживания статусов разнообразных сервисов, серверов и сетевого оборудования. Рассказывать про всю функциональность Zabbix’а не имеет смысла, отметим лишь то, что есть серверная часть, которая собирает, обрабатывает и хранит данные, и агенты, которые располагаются на устройствах, с которых эти данные собираются.

Нередко на пентестах встречаются устаревшие версии Zabbix, или Zabbix с дефолтными или словарными паролями администраторов (а иногда и все вместе). В таких случаях Zabbix становится легкой добычей для пентестера.

Стоит отметить и новую уязвимость CVE-2022-23131, которая позволяет обойти аутентификацию, если используется SAML SSO. Уязвимость заключается в том, что в некоторых классах не вызывается метод проверки подписи CEncryptedCookieSession::checkSign(), в частности в классе CCookieSession, который отвечает за обработку файлов Cookie. Из-за этого значение cookie не верифицируется на сервере, а так как клиент может модифицировать cookie, то атакующий может спокойно его поменять. Это приводит к возможности обхода аутентификации, так как атакующему достаточно изменить значение поля saml_data[username_attribute] в Cookie-файле zabbix_session. В этом поле нужно указать логин администратора, от имени которого нужно авторизоваться.

Часть кода ui/index_sso.php, в котором отсутствует верификация cookie.

if (CSessionHelper::has('saml_data')) {
       $saml_data = CSessionHelper::get('saml_data');
       CWebUser::$data = API::getApiService('user')->loginByUsername($saml_data['username_attribute'],
           (CAuthenticationHelper::get(CAuthenticationHelper::SAML_CASE_SENSITIVE) == ZBX_AUTH_CASE_SENSITIVE),
           CAuthenticationHelper::get(CAuthenticationHelper::AUTHENTICATION_TYPE)
       );

Так как в классе CCookieSession не вызывается метод проверки подписи, то мы успешно пройдем аутентификацию и получим доступ к панели администратора.

Предположим, что нам удалось каким-либо образом получить доступ к панели администратора Zabbix. Для того, чтобы выполнять системные команды на сервере и агентах, достаточно заглянуть в документацию, так как возможность выполнения команд на сервере и агентах заложена разработчиками в продукт. Разберем несколько кейсов с помощью которых можно выполнить системные команды. Отметим, что команды можно исполнять на агентах, только если установлен флаг EnableRemoteCommands=1 в файле /etc/zabbix/zabbix_agentd.conf. По умолчанию выставлено значение EnableRemoteCommands=0.

1. Выполнение команд через scripts

Для выполнения команд вам необходима учетная запись с ролью Super Admin. В документации сказано, что в разделе Administration Scripts определены глобальные скрипты, которые мы можем изменить или создать новые. Например, мы можем пропинговать или выполнить трассировку хостов.

Чтобы создать новый скрипт нажимаем Create script. В поле Commands прописываем команды, которые хотим исполнить, например, hostname и id. Выбираем, где мы хотим исполнять скрипт: на агенте или сервере. Сохраняем.

Для того, чтобы выполнить скрипт, заходим в раздел Monitoring → Latest data. Выбираем нужный хост и название созданного скрипта, далее в окне отобразится вывод команд.

2. Выполнение команд через Items

Данный способ будет полезен в случае, если вы получили учетную запись с привилегиями Admin (стоит уточнить, что при получении УЗ Super Admin все перечисленные сценарии RCE будут работать, так как этот тип УЗ имеет максимальные привилегии). У такой учетной записи будет ограниченный доступ к панели администратора.

В таких условиях также можно будет выполнить команды на агентах, для этого переходим в раздел Configuration → Hosts → Items → Create Item

В поле Key указываем команду через ключ system.run. Сохраняем и команда автоматически будет выполнена на агенте.

Сохраняем и проверяем подключение в nc.

3. Выполнение команд через Actions

Данный способ также будет работать, если вы получили учетную запись с привилегиями Admin. В Zabbix есть функциональность с помощью которой можно выполнять команды в результате каких-либо событий. Чтобы создать событие, заходим в раздел Configuration→Actions→Event source→Discovery→Create action.

Задаем имя, выбираем тип операции Remote command, в поле Commands вводим полезную нагрузку, в поле Execute on указываем каким способом этот скрипт будет выполняться (Zabbix агентом, Zabbix сервером (прокси) или только Zabbix сервером).

Сохраняем и проверяем nc.

4. Выполнение команд через jsonRPC

В старых версиях Zabbix’а (версии 2.2<3.03) уязвимо API, с помощью которого можно взаимодействовать с сервером и агентами через json-RPC. На гитхабе присутствует множество эксплойтов, для успешной эксплуатации нам необходимо знать учетные данные администратора Zabbix и hostId.

Чтобы определить hostId, необходимо зайти в Configuration → Hosts → Items и в GET-параметре увидим его значение.

Указываем в эксплойте недостающие учетные данные и получаем RCE.

Заключение

Полученный низкопривилегированный доступ к системе может быть использован для дальнейшего продвижения по сети. На Windows системах Zabbix-агенты запущены с правами NT AUTHORITY\SYSTEM, что позволяет сразу получить высокие привилегии.

При написании данной статьи я сталкивался с описаниями различных кейсов компрометации внутренней информационной инфраструктуры с помощью Zabbix. В одной статье был описан случай, когда Zabbix-агент был установлен на контроллере домена, а панель администратора Zabbix была доступна с паролем по умолчанию. Вот, что значит получить доменного админа за пару минут 🙂.

На сегодня это все, в конце хотелось бы напомнить, что необходимо вовремя обновлять ПО и менять пароли, установленные по умолчанию, а также не использовать словарные пароли.

Теги:
Хабы:
+4
Комментарии11

Публикации

Информация

Сайт
lab.deiteriy.com
Дата регистрации
Дата основания
Численность
31–50 человек
Местоположение
Россия
Представитель
Антон