
upsmon: 通过攻击者控制的 ups.alarm 在 NOTIFYCMD 执行中实现远程操作系统命令注入(RCE)
upsmon将服务器提供的、攻击者可控制的 ups.alarm 值未经清理地插入到通过 system() 运行的 shell 命令中。当受监控设备报告 ALARM 状态,且操作员已配置 NOTIFYCMD 在 ALARM 事件上使用 EXEC 时,一个包含 shell 命令替换(在 POSIX 上为 $(...) / 反引号,或 Windows cmd.exe 上的 "&…&" 引号逃逸)的 ups.alarm 值将导致以 upsmon 用户(通常是 root)的身份执行任意操作系统命令,因为 upsmon 以 root 身份运行以管理系统关机。
clients/upsmon.c(notify(),以及 WIN32 下的对应函数 async_notify() 和 wall()),
由 clients/upsmon.h 中的标准 NOTIFY_ALARM 消息驱动。git master。 不受影响版本:≤ 2.8.2。
通过对比标签 v2.8.2 与 v2.8.3 确认:ups.alarm → NOTIFY_ALARM 处理逻辑
(ups_is_alarm()、do_notify(…, NOTIFY_ALARM, …)、ups.alarm GET 请求)是在 2.8.3 版本中引入的
(通过 issue #2657 / PR #2658)。已在以下正式发行包上验证存在漏洞:nut-client 2.8.5
(Fedora 42/43)、(Fedora 41 / Debian sid / ubuntu:rolling)、(Ubuntu 25.10);
在 (Debian trixie/stable、Ubuntu 24.04 LTS)上未触发。请参阅 GHSA-mjgp-j4gm-6qg5 阅读完整报告。
https://github.com/user-attachments/assets/a3e76a3f-9be4-4a72-b5e7-3ae9bdcf3de7
2.8.42.8.32.8.1