前言
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
如果文章中的漏洞出现敏感内容产生了部分影响,请及时联系作者,望谅解。
一、漏洞简述
本次研究漏洞为 CVE-2021-4034,该漏洞是由于pkexec 无法正确处理调用参数,从而将环境变量作为命令执行,具有任意用户权限的攻击者都可以在默认配置下通过修改环境变量来利用此漏洞,从而获得受影响主机的root 权限。
polkit介绍
polkit是一个授权管理器,其系统架构由授权和身份验证代理组成,pkexec是其中polkit的其中一个工具,他的作用有点类似于sudo,允许用户以另一个用户身份执行命令
polkit 提供了一个授权 API,供特权程序(“ MECHANISMS ” )使用,通常通过某种形式的进程间通信机制为非特权程序( “ SUBJECTS ”)提供服务。在这种情况下,该机制通常将主体视为不受信任。对于来自主体的每个请求,该机制需要确定该请求是否被授权,或者它是否应该拒绝为主体提供服务。使用 polkit API,一种机制可以将此决定转交给受信任的一方:polkit 权威。
polkit 权限被实现为系统守护进程 polkitd (8),它本身没有什么特权,因为它以 polkitd系统用户身份运行。机制、主体和认证代理使用系统消息总线与授权机构进行通信。
除了作为授权之外,polkit 还允许用户通过验证管理用户或客户端所属会话的所有者来获得临时授权。这对于机制需要验证系统的操作员确实是用户还是管理用户的场景很有用
plokit基本组成
polkit— 授权管理器
polkitd— polkit 系统守护进程
pkcheck— 检查一个进程是否被授权
pkaction— 获取有关已注册操作的详细信息
pkexec— 以另一个用户身份执行命令
pkttyagent— 文本认证助手
二、漏洞检测
Linux下受漏洞影响Polkit版本范围为 2009年5月至今发布的所有 Polkit 版本。
在CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia等
多个Linux发行版上预装有Polkit,即所有存在Polkit的Linux系统均受影响。
但部分版本不受影响:
CentOS:
- CentOS 6:polkit-0.96-11.el6_10.2
- CentOS 7:polkit-0.112-26.el7_9.1
- CentOS 8.0:polkit-0.115-13.el8_5.1
- CentOS 8.2:polkit-0.115-11.el8_2.2
- CentOS 8.4:polkit-0.115-11.el8_4.2
Ubuntu:
- Ubuntu 14.04 ESM:policykit-1-0.105-4ubuntu3.14.04.6+esm1
- Ubuntu 16.04 ESM:policykit-1-0.105-14.1ubuntu0.5+esm1
- Ubuntu 18.04 LTS:policykit-1-0.105-20ubuntu0.18.04.6
- Ubuntu 20.04 LTS:policykit-1-0.105-26ubuntu1.2
- Ubuntu 21.10:policykit-1-0.105-31ubuntu0.1
Debain:
- Debain stretch:policykit-1 0.105-18+deb9u2
- Debain buster:policykit-1 0.105-25+deb10u1
- Debain bullseye:policykit-1 0.105-31+deb11u1
- Debain bookworm,bullseye:policykit-1 0.105-31.1
可以通过以下命令查看版本信息,判断是否可利用:
CentOS:
rpm -qa polkit
Ubuntu:
dpkg -l policykit-1
图1 漏洞检测
可以看到目前版本受此漏洞影响
三、漏洞复现
目前POC已公开,如下:
https://github.com/berdav/CVE-2021-4034
首先下载POC,通过以下命令
git clone https://github.com/berdav/CVE-2021-4034.git
进入POC目录,使用make命令
图2 make命令
注:若出现以下情况,属于环境未安装gcc
图3 缺少gcc,make失败
之后使用./cve-2021-4034
命令进行利用,可以看到成功进行提权。
图4 提权利用
由普通用户权限至root权限。
四、漏洞修复
目前各Linux发行版官方均已给出安全补丁,建议用户尽快升级至安全版本,或参照官方说明措施进行缓解,CentOS、Ubuntu及Debian用户可参考以下链接:
https://ubuntu.com/security/CVE-2021-4034
https://access.redhat.com/security/cve/CVE-2021-4034
https://security-tracker.debian.org/tracker/CVE-2021-4034
截止到目前2022/01/27, CentOS目前已提供安全更新包
下载地址:http://mirror.centos.org/centos/7/updates/x86_64/Packages/
结束语
本文主要介绍了CVE-2021-4034 Linux Polkit权限提升漏洞的复现过程,漏洞主要利用pkexec 无法正确处理调用参数,从而将环境变量作为命令执行,具有任意用户权限的攻击者都可以在默认配置下通过修改环境变量来利用此漏洞,从而获得受影响主机的root 权限。