Jeanback1/CVE-2021-3560-exploit

GitHub: Jeanback1/CVE-2021-3560-exploit

该脚本自动化利用 CVE-2021-3560 Polkit 竞态条件漏洞,通过 accounts-daemon D-Bus 接口实现 Linux 本地权限提升至 root。

Stars: 0 | Forks: 0

# CVE-2021-3560 — Polkit 权限提升 CVE-2021-3560 是 **Polkit**(原 PolicyKit,Linux 桌面环境使用的授权框架)中的一个本地权限提升漏洞。本地无权限攻击者可以利用 `accounts-daemon` D-Bus 接口中的竞态条件来创建特权用户、设置其密码,并最终获取 **root** 访问权限。 ## 工作原理 ### 背景:Polkit + accounts-daemon `accounts-daemon`(`org.freedesktop.Accounts`)是一个系统 D-Bus 服务,用于管理用户账户(创建、删除、密码更改等)。它暴露了以下方法: | 方法 | 动作 | |---|---| | `CreateUser` | 创建新的系统用户 | | `SetPassword` | 设置用户密码 | | `DeleteUser` | 删除用户 | 这些操作需要授权。当 D-Bus 调用到达时,**Polkit** 会介入调用者和 `accounts-daemon` 之间: ``` Caller → D-Bus → Polkit (authorization check) → accounts-daemon (action) ``` Polkit 决定调用者是否具有权限,如果有,则将请求转发给 `accounts-daemon` 执行。 ### 竞态条件 该漏洞是一个 **TOCTOU (Time Of Check, Time Of Use)** 竞态。以下是关键点: 1. 向 `accounts-daemon` 发送 D-Bus 方法调用(例如 `CreateUser`)。 2. **Polkit** 接收调用并执行授权检查——通常依赖于超时并返回“未授权”响应的 polkit 代理对话框。然而,由于一个 bug,polkit 中的超时/错误处理错误地将某些错误条件视为成功,或者使守护进程端的处理处于部分授权状态。 3. 如果 D-Bus 调用在**恰好的时机被终止**——即在 Polkit 做出授权决定之后,但在 `accounts-daemon` 完成处理之前——用户创建将在没有适当身份验证的情况下通过,但用户记录最终**不完整**(例如,没有密码,没有主目录)。 4. 然后,攻击者可以利用相同的竞态在新建的(但未经过身份验证的)用户上调用 `SetPassword`,或者这种不完整状态本身就会授予提升的权限。 简而言之:在恰当的时机终止请求,就可以绕过身份验证。 ### 漏洞利用的作用 此 `exploit.sh` 脚本自动化了完整的攻击链: | 步骤 | 动作 | |---|---| | **1. 时间校准** | 使用虚拟的 `CreateUser("nobody")` 调用来测量 D-Bus 往返所需的时间,计算“终止窗口” | | **2. 创建用户** | 为选定用户名发送 `CreateUser` 调用,在后台启动它,休眠计算出的窗口时间,然后终止它——利用竞态创建未经授权的用户 | | **3. 设置密码** | 一旦用户存在(处于不完整状态),使用相同的竞态技术发送 `SetPassword` 调用以分配已知密码 | | **4. 权限提升** | 使用 `su` 切换到新用户,运行 `sudo`(之所以有效,是因为该用户是通过绕过授权的路径创建的),将 `/bin/bash` 复制到 `/var/tmp/bash` 并设置 **SUID root**,然后生成 root shell | ## 用法 ``` # 克隆仓库 git clone https://github.com/Jeanback1/CVE-2021-3560.git cd CVE-2021-3560 # 使 exploit 可执行 chmod +x exploit.sh # 运行它 ./exploit.sh ``` 漏洞利用完成后,你将获得一个 root shell: ``` whoami # root ``` ### 示例输出 ![漏洞利用执行](https://static.pigsec.cn/wp-content/uploads/repos/cas/af/af644ed54d735d0df4a5b0a8c3a8ec53079b67ad218d485eb34c6156484c1e73.png) ## 受影响版本 | 组件 | 受影响 | |---|---| | **polkit** | ≤ 0.119(未打补丁) | | **accounts-daemon** (accountsservice) | 使用受影响 polkit 的所有版本 | 该漏洞已在 polkit **0.120** 及更高版本中修复。 已修复的发行版(非详尽列表): - Ubuntu 20.04+(2021 年 6 月之后包含安全更新) - Debian 11+(包含安全更新) - RHEL 8+ / CentOS 8+(包含勘误更新) - Fedora 34+ ## 免责声明 本仓库仅供**教育和授权的安全研究使用**。请勿在你没有所有权或明确测试权限的系统上使用此漏洞利用。作者对滥用行为不承担任何责任。
标签:CSV导出, Polkit, Web报告查看器, 应用安全, 本地提权