该漏洞使非特权本地用户能够获得系统的 root shell。只需几个标准命令行工具即可轻松利用该漏洞,正如您在这段简短的视频中所见。在这篇博文中,我将解释该漏洞的工作原理,并向您展示源代码中的错误位置。
目录
- CVE-2021-3560 的历史和易受攻击的发行版
- 关于 polkit
- 漏洞利用步骤
- polkit 架构
- 漏洞
- org.freedesktop.policykit.imply 注释
- 结论
CVE-2021-3560 的历史和易受攻击的发行版
我发现的这个漏洞相当古老。它是七年前在提交bfa5036中引入的,并首次随 polkit 版本 0.113 一起发布。然而,许多最流行的 Linux 发行版直到最近才发布这个易受攻击的版本。
该漏洞在Debian及其衍生版本(例如Ubuntu)上的历史略有不同,因为 Debian 使用的是具有不同版本编号方案的polkit 分支。在 Debian 分支中,该漏洞是在提交f81d021中引入的,并首次随版本 0.105-26 一起发布。Debian 的最新稳定版本Debian 10(“buster”)使用的是版本 0.105-25,这意味着它不易受攻击。但是,一些 Debian 衍生版本(例如 Ubuntu)基于Debian 不稳定版本,因此容易受攻击。
下表列出了一些流行的发行版以及它们是否存在漏洞(请注意,这不是一个完整的列表):
分配 | 易受伤害的? |
---|---|
RHEL 7 | 不 |
RHEL 8 | 是的 |
Fedora 20(或更早版本) | 不 |
Fedora 21(或更高版本) | 是的 |
Debian 10(“buster”) | 不 |
Debian 测试(“靶心”) | 是的 |
Ubuntu 18.04 | 不 |
Ubuntu 20.04 | 是的 |
关于polkit
当您看到如下对话框时,polkit就是在后台运行的系统服务:
提示身份验证的 polkit 对话框的屏幕截图
它本质上扮演着法官的角色。如果你想做一些需要更高权限的事情——例如,创建一个新的用户帐户——那么 polkit 的工作就是决定你是否被允许这样做。对于某些请求,polkit 会立即决定允许或拒绝