Введение
Zabbix — это система мониторинга, предназначенная для отслеживания состояния ИТ-инфраструктуры, серверов, сетевых устройств, приложений и сервисов в реальном времени.
Для чего нужен:
-
Мониторинг ресурсов: CPU, память, диски, сетевые интерфейсы.
-
Слежение за доступностью: Проверка работы сайтов, приложений, баз данных.
-
Уведомления: Настройка алертов (e-mail, Telegram, SMS) при сбоях или достижении критических значений.
-
Сбор метрик: Анализ производительности и прогнозирование проблем.
-
Автоматизация задач: Выполнение удалённых команд на серверах.
Zabbix полезен для обеспечения стабильной работы инфраструктуры и быстрого реагирования на проблемы.
Данная статья представлена исключительно в образовательных целях. Red Team сообщество «GISCYBERTEAM» не несёт ответственности за любые последствия ее использования третьими лицами.
Об уязвимости
27 ноября 2024 года была выявлена критическая уязвимость в Zabbix с CVSS-оценкой 9.9, представляющая собой SQL-инъекцию в одном из эндпоинтов API Zabbix. Уязвимость позволяет атакующему, имеющему доступ к API, выполнить произвольные SQL-запросы. При определённых настройках Zabbix, которые разрешают удалённое выполнение команд через агентов, эта уязвимость может быть использована для полной компрометации инфраструктуры, находящейся под мониторингом Zabbix.
Уязвимости подвержены следующие версии Zabbix Frontend:
6.0.0 - 6.0.31 / 6.0.32rc1 6.4.0 - 6.4.16 / 6.4.17rc1 7.0.0 / 7.0.1rc1
SQL-инъекция — это тип уязвимости в приложениях, при которой злоумышленник может вставить вредоносные SQL-запросы в строку запроса к базе данных. Это может позволить ему получить несанкционированный доступ к данным, изменить их, удалить или выполнить другие вредоносные операции, такие как обход аутентификации или управление системой. SQL-инъекции часто возникают из-за недостаточной валидации входных данных.
Подготовка тестового окружения
Для развертывания стенда будет использована виртуальная машина с операционной системой Debian, на которой Zabbix версии 6.0.30 будет развернут в Docker контейнере. Установка будет производиться с использованием следующих команд:
sudo apt install docker.io docker-compose # установка Docker и docker-compose nano docker-compose.yaml
После выполнения этих команд откроется текстовый редактор с файлом docker-compose.yaml
, в который необходимо внести следующее содержимое:
version: '3.5' services: zabbix-db: image: mysql:8.0-oracle container_name: zabbix-db environment: MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_password MYSQL_ROOT_PASSWORD: root_password volumes: - zabbix-db-data:/var/lib/mysql restart: unless-stopped zabbix-server: image: zabbix/zabbix-server-mysql:ubuntu-6.0.30 container_name: zabbix-server environment: DB_SERVER_HOST: zabbix-db MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_password depends_on: - zabbix-db ports: - "10051:10051" restart: unless-stopped zabbix-web: image: zabbix/zabbix-web-nginx-mysql:ubuntu-6.0.30 container_name: zabbix-web environment: DB_SERVER_HOST: zabbix-db MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_password PHP_TZ: Europe/Moscow depends_on: - zabbix-server ports: - "8080:8080" restart: unless-stopped zabbix-agent: image: zabbix/zabbix-agent:ubuntu-6.0.30 container_name: zabbix-agent environment: ZBX_SERVER_HOST: zabbix-server depends_on: - zabbix-server restart: unless-stopped volumes: zabbix-db-data:
Теперь для запуска Zabbix достаточно выполнить команду из каталога, содержащего файл docker-compose.yaml
:
sudo docker-compose up -d
Веб-интерфейс Zabbix стал доступен по адресу: http://127.0.0.1:8080:
Также обратите внимание, что Zabbix можно установить с помощью официальных Docker контейнеров. Они доступны для скачивания на GitHub.
Подготовка условий для эксплуатации уязвимости
Для эксплуатации уязвимости необходим пользовательский аккаунт с доступом к API. Для демонстрации создадим аккаунт с минимальными правами, но доступом к API. Создать пользователя можно в разделе Administration -> Users:
Стандартные админские учётные данные Zabbix:
Логин: Admin
Пароль: zabbix
Создадим учетную запись giscyber
и назначим специальную роль для этой учетной записи в разделе Administration -> User roles. Роль будет настроена с минимальными привилегиями и доступом к API:
Для получения токена сессии отправьте POST запрос с логином и паролем пользователя к API Zabbix:
Получив сессионный ключ, можно приступить к эксплуатации уязвимости.
Эксплуатация уязвимости
Эндпоинт users.get
, доступный любому пользователю Zabbix с доступом к API, уязвим к Time-based Blind SQL injection. Для проверки уязвимости можно отправить следующий запрос на /api_jsonrpc.php
:
{ "jsonrpc": "2.0", "method": "user.get", "params": { "selectRole": [ "roleid", "name", "type", "readonly AND (SELECT(SLEEP(5)))" ], "userids": [ "1", "2" ] }, "id": 1, "auth": "**ЗДЕСЬ ИСПОЛЬЗУЕТСЯ ПОЛУЧЕННЫЙ РАНЕЕ СЕССИОННЫЙ КЛЮЧ**" }
SQL инъекция — это атака, при которой злоумышленник вводит вредоносный SQL код в приложение для доступа или изменения данных в базе данных.
Time-based SQL инъекция — это тип атаки, при котором злоумышленник использует функцию паузы в SQL запросе, чтобы проверить наличие определенных условий путем измерения времени ответа сервера.
Как видно, в данном запросе используется встроенная в MySQL функция SLEEP()
, которая вызывает паузу на заданное внутри скобок количество секунд. Отправив запрос, можно убедиться, что ответ сервера занимает ровно 5 секунд, что подтверждает уязвимость к Time-based blind SQL injection:
Для демонстрации возможной пользы уязвимости воспользуемся следующей нагрузкой, чтобы извлечь название базы данных, с которой работает Zabbix.
AND (SELECT SLEEP(5) FROM DUAL WHERE DATABASE() LIKE '_')
Для начала необходимо выяснить сколько символов в названии базы данных, для этого добавляем символ «_» в нагрузку пока приложение не ответит с задержкой >= 5 секундам. Для тестовой конфигурации нагрузка отработала при 6 символах «_», значит имя базы данных содержит ровно 6 символов:
Выделим 1-й символ «_» и отправим его в Intruder Burp Suite, затем выберем режим Brute forcer для перебора первого символа имени базы данных:
Сортируем по времени ответы сервера и узнаём, что первая буква в имени базы данных — «z»:
Проделав такие манипуляции для всех символов, выясняем что имя БД — «zabbix»:
Заключение
С помощью Time-based SQL инъекции злоумышленник может получить доступ к более привилегированным учетным записям Zabbix, что создает угрозу компрометации всей инфраструктуры, находящейся под наблюдением агентов Zabbix. Это делает уязвимость особенно серьезной, что подтверждается высоким рейтингом CVSS. В связи с этим крайне рекомендуется устанавливать самые последние версии программного обеспечения, в которых выпущены соответствующие патчи для устранения данной уязвимости.
Подписывайтесь на наш Telegram-канал https://t.me/giscyberteam
ссылка на оригинал статьи https://habr.com/ru/articles/865828/
Добавить комментарий