CVE-2021-3156,即 Baron Samedit,是 sudo 程序中的一个堆缓冲区溢出漏洞。它允许任何无特权的本地用户无需身份验证即可在存在漏洞的系统上获得 root 权限。
本项目记录了该漏洞的完整利用与缓解过程,是卢森堡大学 软件漏洞:利用与缓解 课程的一部分。
| 属性 | 详情 |
|---|---|
| CVE ID | CVE-2021-3156 |
| 别名 | Baron Samedit |
| 类型 | 堆缓冲区溢出 |
| 组件 | sudo(sudoedit 模式) |
| 影响 | 本地权限提升至 Root |
| 受影响版本 | sudo ≤ 1.8.31(Ubuntu)、≤ 1.9.5p1(其他系统) |
| 修复版本 | sudo 1.8.31-1ubuntu1.5 |
| CVSS 评分 | 7.8(高危) |
OS: Ubuntu 20.04.1
sudo version: 1.8.31-1ubuntu1 (vulnerable)
libc version: 2.31
User: Non-root account
要复现漏洞状态:
sudo apt install sudo=1.8.31-1ubuntu1
当 sudo 以 sudoedit 模式 执行,并带有经过精心构造的命令行参数导致内部堆缓冲区溢出时,便会触发该漏洞。
该漏洞利用通过内存分析精心调优了四个关键参数:
| 参数 | 大小 | 用途 |
|---|---|---|
A | 56 字节 | 溢出初始缓冲区 |
B | 54 字节 | 溢出第二个堆块 |
Nulls | 63 字节 | 构造内存对齐 |
LC_ALL | 212 字节 | 通过环境变量控制堆布局 |
exploit_launcher.c — 主攻击程序通过以下 5 个步骤触发漏洞:
LC_ALL 以控制堆内存布局sudoeditexploit_payload.c — 恶意负载漏洞利用成功时,通过 _init 函数自动执行:
0(root)$ make
$ ./exploit_it
[!] CVE-2021-3156 Exploit
[+] Target: Ubuntu 20.04.1 (sudo 1.8.31, libc-2.31)
[+] Parameters: A=56, B=54, Nulls=63, LC_ALL=212
[+] Launching exploit...
[+] Exploit successful. Root privileges obtained.
# whoami
root
✅ 成功从无特权用户提升至 root。
将 sudo 升级到已修复版本:
sudo apt install sudo=1.8.31-1ubuntu1.5
升级后,相同的漏洞利用 无法执行,root 权限未被授予——证实补丁有效。
关键要点:保持
sudo等系统工具更新对于防止权限提升攻击至关重要。
├── exploit_launcher.c # Main exploit triggering the heap overflow
├── exploit_payload.c # Malicious payload spawning root shell
├── libnss_X/ # Malicious library loaded during exploitation
└── Makefile # Build configuration
# Build
make
# Run exploit
./exploit_it