CVE-2025-61909Icinga 2是一款广泛使用的开源监控系统,该漏洞(CVE-2025-61909)存在于其随包分发的safe-reload脚本和logrotate配置中。从2.10.0版本开始到2.15.1、2.14.7和2.13.13之前的版本,Icinga 2的safe-reload脚本(在执行systemctl reload icinga2时也会被调用)以及logrotate配置存在一个权限提升问题。具体而言,这些脚本从由Icinga守护进程用户可写的PID文件中读取主Icinga 2进程的PID,然后以root用户身份向该PID发送信号。由于PID文件可被Icinga用户修改,攻击者(拥有Icinga用户权限)可以通过篡改PID文件中的PID值,使root用户向任意进程发送信号。这可能导致Icinga用户向其原本无权控制的进程发送信号,例如终止关键服务或干扰其他系统进程,从而造成可用性影响。该漏洞的CVSS 3.1评分为4.4分,属于中危级别,攻击向量为本地,需要高权限(Icinga用户权限),无需用户交互,主要影响为可用性(高)。该漏洞已在Icinga 2的2.15.1、2.14.7和2.13.13版本中修复。
该漏洞的核心问题在于safe-reload脚本和logrotate配置中的权限分离不当。
技术原理:
1. Icinga 2守护进程以专用的Icinga用户身份运行,其PID存储在通常位于/var/run/icinga2/icinga2.pid的PID文件中。
2. 该PID文件的权限设置允许Icinga用户进行写入操作。
3. 当执行systemctl reload icinga2或logrotate触发日志轮转时,safe-reload脚本会以root权限运行。
4. 脚本读取PID文件中的PID值,然后以root身份向该PID发送信号(如SIGHUP用于重新加载配置)。
5. 由于PID文件可被Icinga用户写入,攻击者可以在脚本读取之前修改PID文件中的值,将其替换为任意进程的PID。
利用方式:
1. 攻击者首先获取Icinga用户权限(可能是通过其他漏洞或配置错误)。
2. 攻击者确定目标进程的PID(例如关键系统服务或另一个用户的进程)。
3. 攻击者将目标PID写入Icinga 2的PID文件。
4. 触发safe-reload操作(如等待logrotate自动执行或手动执行systemctl reload icinga2)。
5. root权限的脚本读取被篡改的PID,并向目标进程发送信号。
6. 攻击者可以选择发送不同类型的信号来实现不同的效果,如SIGTERM终止进程、SIGSTOP暂停进程等。
此漏洞利用了权限分离中的TOCTOU(Time of Check to Time of Use)问题,即脚本在以root身份操作时信任了低权限用户可修改的数据。