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
```
### 示例输出

## 受影响版本
| 组件 | 受影响 |
|---|---|
| **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报告查看器, 应用安全, 本地提权