存在12年的Bug被发现,授予任何用户root访问权限

2,390

近日,Linux供应商发布了一个polkit组件中内存损坏的漏洞,该漏洞允许无特权的登录用户在默认配置下获得系统的完全root权限。

据悉,该漏洞是由安全厂商Qualys,并披露了相关细节。

Polkit(PolicyKit)是一个设置政策的工具,管理非特权进程与特权进程的互动方式。该漏洞存在于Polkit pkexec中,它是一个SUID-root程序,默认安装在所有主要的Linux发行版中。该漏洞被命名为CVE-2021-4034,CVSS评分为7.8。

Qualys 漏洞和威胁研究主任Bharat Jogi在一篇博文中解释说,pkexec漏洞为攻击者打开了获得root权限的大门。目前Qualys的研究人员已经在Ubuntu、Debian、Fedora和CentOS的默认安装上证明了漏洞的存在,因此,推测其他Linux发行版也存在漏洞。

这个漏洞已经在众目睽睽之下隐藏了12年以上,并且自2009年5月的第一个版本上线以来,就一直在影响所有版本的pkexec。

当pkexec main()函数处理命令行参数且argc--ARGument Count--为零时,这个bug就会被触发。该函数试图访问参数列表,使用一个空的argv--命令行参数字符串的ARGument Vector。因此,内存会被读取和写入,攻击者可以利用这一点注入环境变量,使得任意代码从存储中加载并以root身份运行程序。

"这种越界写入允许我们重新将一个'不安全'的环境变量(例如,LD_PRELOAD)引入pkexec的环境中,"Jogi解释说:"这些'不安全'变量通常在调用main()函数之前从SUID程序的环境中删除(由ld.so)。"

polkit也适用于非Linux操作系统,如Solaris和BSD。这些系统还没有进行可利用性测试,但OpenBSD没有受到影响,因为如果argc为0,内核就不会execve()--按路径名执行程序。