【漏洞利用】CVE-2021-3560 Polkit权限提升

  • A+
所属分类:安全漏洞

点击上方蓝字“Ots安全”一起玩耍

使用 Polkit 提升您的权限。

介绍

首先,我要感谢MuirlandOracle至极创建房间Polkit:CVE-2021-3560的TryHackMe。我在做完房间之后写了这篇文章,以帮助我更多地了解这个漏洞并分享有关它的详细信息。


什么是Polkit?

Polkit(以前称为PolicyKit)是在类 Unix 操作系统中控制系统范围权限的组件。它为非特权进程与特权进程通信提供了一种有组织的方式。Polkit 允许对集中式系统策略进行一定程度的控制。它由来自Red Hat的 David Zeuthen 开发和维护,并由freedesktop.org项目托管。

阿科ř丁到Polkit参考手册,polkit的系统架构包括管理局(作为系统的消息总线上的服务中实现)和每个用户会话的认证代理的(提供与由用户的图形环境中启动)。操作由应用程序定义。供应商、站点和系统管理员可以通过授权规则控制授权策略。

【漏洞利用】CVE-2021-3560 Polkit权限提升

CVE-2021–3560:

Polkit 是 Linux 授权系统的一部分。实际上,当您尝试执行需要更高级别权限的操作时,可以使用策略工具包来确定您是否具有必要的权限。它与 systemd 集成,并且比传统的 sudo 系统更具可配置性。事实上,它有时被称为“systemd 的 sudo”。


2021 年初,一位名叫Kevin Backhouse的研究人员在 Linux polkit 实用程序中发现了一个已有七年历史的特权升级漏洞(自指定为 CVE-2021-3560)。


Polkit 可能会被欺骗绕过 D-Bus 请求的凭据检查,将请求者的权限提升到 root 用户。


例如,无特权的本地攻击者可以利用此漏洞创建新的本地管理员。此漏洞的最大威胁是数据机密性和完整性以及系统可用性。


不同的 Linux 发行版(甚至同一发行版的不同版本)使用不同版本的软件,这意味着只有一些容易受到攻击。


以下主流发行版很容易受到攻击:

  • 红帽企业 Linux 8

  • Fedora 21(或更高版本)

  • Debian 测试(“靶心”)

  • Ubuntu 20.04 LTS(“焦点窝”)

这个漏洞的原始描述可以在 Kevin Backhouse 写的一篇文章中找到,https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/。


Polkit 有多脆弱?

通过手动将 dbus 消息发送到 dbus-daemon(实际上是一个允许不同进程能够相互通信的 API

),然后在请求被完全处理之前终止请求,我们可以欺骗 polkit 授权命令。如果您不熟悉守护进程,它们实际上是在 Linux 上运行的后台服务。dbus-daemon 是一个在后台运行的程序,它在应用程序之间代理消息。


攻击者手动向accounts-daemon 发送一条dbus 消息,请求创建一个具有sudo 权限的新帐户(或稍后为新用户设置密码)。该消息由 dbus-daemon 赋予一个唯一的 ID。


攻击者在 polkit 收到消息后,但在 polkit 有机会处理该消息之前杀死该消息。这有效地破坏了唯一的消息 ID。Polkit 向 dbus-daemon 询问发送消息的用户的用户 ID,引用(现已删除)消息 ID。


dbus-daemon 找不到消息 ID,因为我们在第二步中杀死了它。它通过响应错误代码来处理错误。


Polkit 错误地处理了错误并用 0 替换了用户 ID — 即机器的 root 帐户。

考虑到 root 用户请求了该操作,polkit 允许该请求不受挑战地通过。


简而言之,通过在 dbus-daemon 有机会为 polkit 提供正确 ID 之前销毁消息 ID,我们利用 polkit 中糟糕的错误处理来诱使该实用程序

认为请求是由全能的 root 用户发出的.


The Exploitation

【漏洞利用】CVE-2021-3560 Polkit权限提升

第一个命令将手动向帐户守护程序发送一条 dbus 消息,打印响应并创建一个名为attacker (string:attacker) 的新用户,其描述为“Pentester Account”(字符串:“Pentester Account”)和sudo 的成员身份group 设置为 true(由 int32:1 标志引用)。使用 time 命令,我们确定命令运行需要多长时间。这需要 0.011 秒或 11 毫秒。每次运行命令时,这个数字都会略有不同。



我们需要在大约执行到一半时终止命令,这是第二个命令。五毫秒通常在提供的机器上工作得很好;但是,请注意,这不是一个确切的事情。您可能需要更改睡眠时间,或多次运行该命令才能生效。也就是说,一旦你找到一个合适的时间,它就应该始终如一地工作。



为了解释第二个命令,我们在后台作业中发送了 dbus 消息(使用与号将命令置于后台)。然后我们告诉它休眠 5 毫秒(休眠 0.005 秒),然后终止前一个进程($!)。这成功创建了新用户,并将其添加到 sudo 组中。


此时需要注意,本实例中新用户的用户ID为1000。现在,我们需要给“攻击者”一个密码,所以让我们在 SHA512-Crypt 中加密一个。用 (Expl01ted) 作为密码。

【漏洞利用】CVE-2021-3560 Polkit权限提升

现在让我们完成这个!上次是 5 毫秒,所以它也应该在这里工作。我们只需要将我们创建的哈希值加上密码 Expl01ted 即可。

【漏洞利用】CVE-2021-3560 Polkit权限提升

【漏洞利用】CVE-2021-3560 Polkit权限提升


参考:

Polkit 漏洞利用 - CVE-2021-3560

CVE-2021-3560 Traitor漏洞利用

CVE-2021-3560:Linux 权限提升漏洞警报

【漏洞利用】CVE-2021-3560 Polkit权限提升

本文始发于微信公众号(Ots安全):【漏洞利用】CVE-2021-3560 Polkit权限提升

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: