7年前的Polkit漏洞让未经授权的Linux用户获得根访问权限

在polkit系统服务中发现的一个七年前的权限提升漏洞可被恶意的无权限本地攻击者利用,以绕过授权并将权限提升到根用户。
该漏洞被追踪为CVE-2021-3560(CVSS分数:7.8),影响0.113到0.118之间的polkit版本,由GitHub安全研究员凯文·巴克豪斯发现,他说该问题是在2013年11月9日的代码提交中引入的。Red Hat的Cedric Buissart指出,基于polkit 0.105的Debian发行版也容易受到攻击。
Polkit(née PolicyKit)是一个用于在Linux发行版中定义和处理授权的工具包,用于允许非特权进程与特权进程通信。
“当一个请求进程在调用polkit_system_bus_name_get_creds_sync开始之前与dbus守护进程断开连接时,该进程无法获得该进程的唯一uid和pid,也无法验证请求进程的权限,”Red Hat在一则建议中说。“此漏洞的最大威胁是数据机密性、完整性以及系统可用性。”
RHEL 8、Fedora 21(或更高版本)、Debian“Bullseye”和Ubuntu 20.04是受polkit漏洞影响的一些流行Linux发行版。该问题在6月3日发布的0.119版本中得到了缓解。

Backhouse在昨天发表的一篇文章中说:“该漏洞非常容易被利用。只需在终端中使用bash、kill和dbus send等标准工具,就可以执行几个命令。”,添加缺陷是通过发送DBUS发送命令(例如,创建一个新用户)来触发的,但是在PoKIT仍处于处理请求的中间时终止进程。
“dbus send”是一种Linux进程间通信(IPC)机制,用于向D-Bus消息总线发送消息,允许在同一台机器上同时运行的多个进程之间进行通信。Polkit的策略授权守护程序作为一个连接到系统总线的服务来实现,以安全地验证凭据。
在终止该命令时,它会导致绕过身份验证,因为polkit错误地处理了终止的消息,并将请求视为来自具有根权限(UID 0)的进程,从而立即授权该请求。
Backhouse说:“要触发易受攻击的代码路径,必须在正确的时刻断开连接。”。“由于涉及多个进程,“正确时刻”的时机因运行时间而异。这就是为什么漏洞利用通常需要几次尝试才能成功。我猜这也是之前未发现漏洞的原因。”
我们鼓励用户尽快更新他们的Linux安装,以修复该漏洞带来的任何潜在风险。