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](https://img.shields.io/badge/CVE-2021--3156-red?style=flat-square) ![严重性](https://img.shields.io/badge/Severity-Critical-red?style=flat-square) ![操作系统](https://img.shields.io/badge/OS-Ubuntu%2020.04.1-orange?style=flat-square) ![状态](https://img.shields.io/badge/Status-Patched-green?style=flat-square) ![语言](https://img.shields.io/badge/Language-C-blue?style=flat-square) ## 概述 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报告查看器, 客户端加密, 本地提权, 漏洞分析, 漏洞复现, 缓冲区溢出, 路径探测