当前位置:   article > 正文

CVE-2021-4034 Polkit_cve-2021-4034中polkit版本

cve-2021-4034中polkit版本

CVE-2021-4034 Polkit

0x01 漏洞介绍

Polkit是一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯:控制决策集中在统一的框架之中,决定低优先级进程是否有权访问高优先级进程

另外Polkit在系统层级进行权限控制,提供了一个低优先级进程和高优先级进程进行通讯的系统。和sudo等程序不同,Polkit并没有赋予进程完全的root权限,而是通过一个集中的策略系统进行更精细的授权。

0x02 漏洞影响版本

目前主流Linux版本可能均受影响

0x03 漏洞分析

漏洞出在pkexec命令上
在这里插入图片描述
在main函数里,如果传入的命令不是绝对路径,就会在PATH环境变量的目录里搜索

main (int argc, char *argv[]){
	for (n = 1; n < (guint) argc; n++){

	}
	path = g_strdup (argv[n]);

	if (path[0] != '/'){

	s = g_find_program_in_path (path);

	argv[n] = path = s;
	}
}
....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述
for循环从下标1开始遍历argv[],但Linux里argv允许只包含一个元素,就是使用execve并给argv传入{0},此时argc就是0。
for循环结束之后,变量n为1。下面产生了第一个越界读,而后又产生了一个越界写,把g_find_program_in_path返回的指针尝试写回argv[1]。

调用execve之后,新进程的栈如下,新进程的栈如下:
在这里插入图片描述
巧合的是argv之后正好马上接的是envp的第一个元素,完全可控。只要不是/开头的字符串就会进入越界写的分支。如果能控制g_find_program_in_path返回的字符串,就可以注入任意的环境变量。

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

GitHub Security Labs在去年就发过一篇Polkit的本地提权漏洞CVE-2021-3560,只是利用条件有一定的限制。

0x04 漏洞复现

本地复现

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

编译
在这里插入图片描述
在这里插入图片描述
执行
在这里插入图片描述
参考文章:https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034

https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/1000187
推荐阅读
相关标签
  

闽ICP备14008679号