注:本文仅供学习使用,勿利用作恶意攻击行为。
Polkit(PolicyKit)是类Unix系统中一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯。pkexec是Polkit开源应用框架的一部分,可以使授权非特权用户根据定义的策略以特权用户的身份执行命令。该漏洞是由于pkexec 没有正确处理调用参数,导致将环境变量作为命令执行,攻击者可以通过构造环境变量的方式,诱使pkexec执行任意代码使得非特权本地用户获取到root的权限。
一、漏洞原理:
- Polkit (PolicyKit) 是一个在许多 Linux 系统上用于授权非特权用户执行管理任务的框架。它允许系统管理员定义哪些用户可以执行特定的管理任务。Polkit 常常与图形界面工具、桌面环境、服务管理等一起使用,允许用户在没有完全 root 权限的情况下执行一些系统管理操作。
- pkexec 是 Polkit 提供的一个工具,用于在命令行界面执行具有管理员权限的命令。pkexec 提供了一种机制,允许非特权用户请求执行需要管理员权限的命令。
原理:
由 Polkit 的 pkexec 工具中的设计缺陷引起的。漏洞的根本问题在于 程序没有正确验证和处理用户的输入,允许攻击者利用环境变量或输入数据对程序进行操控,最终获得root权限。
二、原理详细分析:
1、环境变量注入
pkexec 在执行过程中会受环境变量的影响,特别是 变量。当 pkexec 执行时,它没有充分地验证用户的环境变量,尤其是 环境变量。这使得攻击者可以通过设置 变量,指定恶意的可执行文件路径,并使得 pkexec 执行这些恶意文件。PATHPATHPATH例如,攻击者可以通过以下方式进行操作:改变当前目录并设置恶意程序的路径。
设置 环境变量,让 pkexec 执行攻击者指定的恶意文件,而不是系统的合法程序。PATH
2、setuid 问题
pkexec 是以 root 权限运行的,它利用了 setuid(设置用户ID)机制来提升权限。setuid 允许程序在执行时以指定的用户(通常是 root)身份运行。然而,pkexec 对某些环境变量的处理不当,使得攻击者能够通过环境变量和系统中的一些配置文件控制程序的执行流程。
3、其他潜在的安全缺陷
权限检查不严密:p kexec 在某些情况下没有正确检查用户的权限或没有进行足够的身份验证,这使得攻击者有机会绕过本应存在的权限控制。
文件访问控制不当:p kexec 程序在执行一些操作时,可能错误地依赖用户可访问的文件或路径,从而导致潜在的路径遍历攻击,允许攻击者覆盖系统文件。
三、漏洞影响范围:
Debain stretch policykit-1 < 0.105-18+deb9u2
Debain buster policykit-1 < 0.105-25+deb10u1
Debain bookworm, bullseye policykit-1 < 0.105-31.1
Ubuntu 21.10 (Impish Indri) policykit-1 < 0.105-31ubuntu0.1
Ubuntu 21.04 (Hirsute Hippo) policykit-1 Ignored (reached end-of-life)
Ubuntu 20.04 LTS (Focal Fossa) policykit-1 < 0.105-26ubuntu1.2)
Ubuntu 18.04 LTS (Bionic Beaver) policykit-1 <0.105-20ubuntu0.18.04.6)
Ubuntu 16.04 ESM (Xenial Xerus) policykit-1 <0.105-14.1ubuntu0.5+esm1)
Ubuntu 14.04 ESM (Trusty Tahr) policykit-1 <0.105-4ubuntu3.14.04.6+esm1)
CentOS 6 polkit < polkit-0.96-11.el6_10.2
CentOS 7 polkit < polkit-0.112-26.el7_9.1
CentOS 8.0 polkit < polkit-0.115-13.el8_5.1
CentOS 8.2 polkit < polkit-0.115-11.el8_2.2
CentOS 8.4 polkit < polkit-0.115-11.el8_4.2
四、利用条件:
攻击者需要一个本地用户权限
恶意文件需要可执行权限
五、验证过程
首先查看用户权限:
id

为普通用户,无root权限。
获取测试文件至当前目录,需gcc编译(测试文件地址:https://github.com/arthepsy/CVE-2021-4034)
vim cve-2021-4034-poc.c
gcc cve-2021-4034-poc.c -o exp
编译后得到exp文件,./exp执行文件即可
id查看当前用户权限

已提权为root权限。
六、修复建议:
CentOS 用户可采用如下命令升级到安全版本或更高版本:
yum clean all && yum makecache
yum update polkit -y
验证修复,通过以下命令可查看 Polkit 是否为安全版本:
rpm -qa polkit
Ubuntu 用户可采用如下命令升级至安全版本或更高版本:
sudo apt-get update
sudo apt-get install policykit-1
验证修复,通过以下命令可查看 Polkit 是否为安全版本:
dpkg -l policykit-1
4848

被折叠的 条评论
为什么被折叠?



