Kranti08/CVE-2021-3156-Baron-Samedit
GitHub: Kranti08/CVE-2021-3156-Baron-Samedit
该项目系统分析了 sudo 程序中 CVE-2021-3156 堆缓冲区溢出漏洞的完整利用链并提供缓解方案。
Stars: 0 | Forks: 0
# CVE-2021-3156 – Baron Samedit
### sudo 中的堆缓冲区溢出 | 漏洞利用与缓解分析





## 概述
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
```
## 漏洞工作原理
当以 **sudoedit 模式** 执行 `sudo` 并附带经过精心构造的命令行参数时,会触发内部堆缓冲区溢出,从而导致该漏洞。
该漏洞利用使用了通过内存分析精细调整的四个关键参数:
| 参数 | 大小 | 用途 |
|---|---|---|
| `A` | 56 字节 | 溢出初始缓冲区 |
| `B` | 54 字节 | 溢出第二个堆 chunk |
| `Nulls` | 63 字节 | 构造内存对齐 |
| `LC_ALL` | 212 字节 | 通过环境变量控制堆布局 |
## 漏洞利用结构
### `exploit_launcher.c` — 主漏洞利用程序
通过以下 5 个步骤触发漏洞:
1. **目标规格** — 针对 Ubuntu 20.04.1、sudo 1.8.31 和 libc-2.31 计算出的硬编码值
2. **参数构造** — 创建带有反斜杠的恶意命令行参数以触发溢出
3. **环境设置** — 在环境中填充反斜杠和一个用于加载恶意库的特殊字符串
4. **区域设置变量** — 构造 `LC_ALL` 以控制堆内存布局
5. **执行** — 带上恶意参数和环境调用 `sudoedit`
### `exploit_payload.c` — 恶意 Payload
当漏洞利用成功时,会通过 `_init` 函数自动执行:
1. 将所有用户/组 ID 设置为 `0` (root)
2. 生成一个 root shell
## 漏洞利用结果
```
$ 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 权限 —— 证实该补丁有效。
## 文件
```
├── 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
# 运行 exploit
./exploit_it
```
## 参考
- [Qualys 安全公告](https://www.qualys.com/2021/01/26/cve-2021-3156/baron-samedit-heap-based-overflow-sudo.txt)
- [NVD – CVE-2021-3156](https://nvd.nist.gov/vuln/detail/cve-2021-3156)
标签:CVE-2021-3156, Web报告查看器, 客户端加密, 本地提权, 漏洞分析, 漏洞复现, 缓冲区溢出, 路径探测