Исследователь под псевдонимом TarPeg007 выявил критическую уязвимость в Wazuh Manager - компоненте платформы с открытым исходным кодом для управления безопасностью и корреляции событий. Проблеме присвоен идентификатор GitHub Advisory GHSA-ff9g-85jq-r3g3 и максимальный балл 10.0 по шкале CVSS v3.1. Уязвимость затрагивает выпуск 5.0.0-beta1 (ранняя бета-версия) и отсутствует в стабильной ветке 4.x. Разработчики выпустили исправление в версии 5.0.0-beta3.
Детали уязвимости
Уязвимость связана с механизмом синхронизации данных инвентаризации - новым модулем inventory_sync, который отвечает за передачу от агентов на менеджер сведений об установленном ПО, оборудовании и уязвимостях. Корень проблемы - недостаточная фильтрация поля DataValue.index, которое формируется агентом и передаётся в менеджер в составе плоского буфера (flatbuffer). Это поле напрямую подставляется в тело запроса \_bulk к хранилищу OpenSearch (бэкенд для поиска и аналитики) без экранирования специальных символов. Поле \_id в тех же запросах обрабатывается корректно - через функцию appendEscapedId, а для \_index защита отсутствует.
Асимметрия в обработке приводит к возможности NDJSON-инъекции (формат JSON с разделением строк, используемый для массовых операций в OpenSearch). Агент может включить в значение DataValue.index последовательность символов, завершающую текущий JSON-объект и добавляющую новые строки с произвольными bulk-действиями. После того как менеджер собирает итоговый NDJSON-пакет и отправляет его на сервер OpenSearch, эти "контрабандные" операции выполняются с теми учётными данными, которые хранятся в хранилище ключей (keystore) менеджера. В конфигурациях по умолчанию это учётная запись admin с ролью all_access, дающей полный доступ к кластеру.
Крайне важно, что в стандартной поставке Wazuh Manager разрешает анонимную регистрацию агентов через демон wazuh-authd: параметр use_password установлен в значение no. Таким образом, злоумышленник может подключить собственный агент без какой-либо аутентификации, просто обратившись по TCP-порту 1515. После регистрации атакующий агент обменивается данными с менеджером по стандартному протоколу Wazuh (TCP/1514) с шифрованием AES. Для эксплуатации не требуется ни взаимодействия с пользователем, ни доступа к локальной сети менеджера - всё выполняется удалённо.
В ходе исследования была продемонстрирована полная цепочка атаки с использованием эмулятора агента на Python. Имитатор анонимно регистрировался, получал ключ шифрования, устанавливал соединение с менеджером и отправлял вредоносный DataValue.index. Логи менеджера и ответ сервера OpenSearch подтвердили, что вместе с легитимной операцией индексации была выполнена контрабандная операция удаления документа из любого индекса wazuh-* (например, wazuh-alerts-* или cve_f_remoted_witness). OpenSearch вернул статус “deleted” с кодом 200 - документ был успешно удалён.
Возможные сценарии эксплуатации включают:
- Удаление журналов оповещений (wazuh-alerts-*) - это позволяет заметать следы вредоносной активности и уничтожать судебные доказательства.
- Искажение данных инвентаризации или уязвимостей других агентов - подрыв целостности SIEM-системы (системы управления событиями информационной безопасности).
- Запись вредоносных объектов в системный индекс .kibana\_1 - визуализации, которые видят аналитики на панели управления (дашбордах), могут быть изменены на произвольное содержимое, включая фишинговые сообщения.
- Кросс-tenant манипуляции в мультитенантных развёртываниях, где единственным барьером выступает разделение по индексам - атакующий может повредить данные других организаций.
Уязвимость классифицирована по нескольким общим перечням CWE: CWE-74 (инъекция), CWE-93 (CRLF-инъекция) и CWE-863 (некорректная авторизация). Она затрагивает как недостаток валидации входных данных, так и нарушение доверия между агентом и менеджером: менеджер безоговорочно принимает поле индекса от любого зарегистрированного агента.
Разработчики Wazuh устранили проблему в версии 5.0.0-beta3, внедрив функцию appendEscapedIndex, которая экранирует символы новой строки, кавычки и управляющие символы в поле \_index. Также рекомендуется проводить валидацию имени индекса на границе поступления данных от агента - проверять длину (не более 255 байт), запрещённые символы (пробелы, обратную косую черту, звёздочку и т.д.) и соответствие правилам именования OpenSearch.
Для снижения возможного ущерба администраторам следует пересмотреть роли учётной записи, под которой менеджер подключается к OpenSearch. Вместо предустановленной роли admin/all_access рекомендуется использовать специализированную роль wazuh-server, предоставляющую только необходимые привилегии. Дополнительно стоит включить обязательную аутентификацию агентов (use_password=yes) и настроить проверку сертификатов (ssl_verify_host=yes). Однако эти меры не заменяют самого исправления - только установка бета-версии 5.0.0-beta3 устраняет корневую причину.
Организациям, использующим бета-выпуски Wazuh 5.x, следует немедленно обновить менеджер до 5.0.0-beta3 и проверить конфигурацию доступа к кластеру OpenSearch. Откладывать патч рискованно: эксплуатация не требует сложных условий и может привести к полной компрометации целостности и доступности данных в системе безопасности.
Ссылки