关于 Linux Polkit 组件存在权限提升高危漏洞修复方案
<h1>一、漏洞概述</h1>
<p>1月26日,绿盟科技CERT监测到Qualys研究团队公开披露了在Polkit的pkexec 中发现的一个权限提升漏洞(CVE-2021-4034) ,也被称为PwnKit。该漏洞是由于pkexec 无法正确处理调用参数,从而将环境变量作为命令执行,具有任意用户权限的攻击者都可以在默认配置下通过修改环境变量来利用此漏洞,从而获得受影响主机的root 权限。目前该漏洞的细节和PoC已公开,请相关用户尽快采取措施进行防护。
Polkit(PolicyKit)是类Unix系统中一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯。pkexec是Polkit开源应用框架的一部分,可以使授权非特权用户根据定义的策略以特权用户的身份执行命令。</p>
<h1>二、影响范围</h1>
<h2>漏洞补丁包下载地址</h2>
<p><a href="http://101.69.243.254:5010/share/CCtOwcDy">http://101.69.243.254:5010/share/CCtOwcDy</a></p>
<h2>受影响版本</h2>
<p>2009年5月至今发布的所有 Polkit 版本
注:Polkit预装在CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia等多个Linux发行版上,所有存在Polkit的Linux系统均受影响。</p>
<h2>不受影响版本</h2>
<p>CentOS</p>
<ul>
<li>CentOS 6:polkit-0.96-11.el6_10.2</li>
<li>CentOS 7:polkit-0.112-26.el7_9.1</li>
<li>CentOS 8.0:polkit-0.115-13.el8_5.1</li>
<li>CentOS 8.2:polkit-0.115-11.el8_2.2</li>
<li>CentOS 8.4:polkit-0.115-11.el8_4.2
<h2>麒麟V10受影响的软件包</h2>
<h3>银河麒麟高级服务器操作系统 V10 SP1</h3>
<h4>aarch64架构:</h4></li>
<li>polkit、polkit-devel、polkit-help、polkit-libs
aarch64:更新 polkit 到 polkit-0.116-6.ky10 或更高版本。
<h4>mips64el架构:</h4></li>
<li>polkit、polkit-devel、polkit-help、polkit-libs
mips64el:更新 polkit 到 polkit-0.116-6.ky10 或更高版本。
<h4>x86_64架构:</h4></li>
<li>polkit、polkit-devel、polkit-help、polkit-libs
x86_64:更新 polkit 到 polkit-0.116-6.ky10 或更高版本。
<h3>银河麒麟高级服务器操作系统 V10 SP2</h3>
<h4>aarch64架构:</h4></li>
<li>polkit、polkit-devel、polkit-help、polkit-libs
更新 polkit 到 polkit-0.116-8.p01.ky10 或更高版本
<h4>x86_64架构:</h4></li>
<li>polkit、polkit-devel、polkit-help、polkit-libs
更新 polkit 到 polkit-0.116-8.p01.ky10 或更高版本
<h3>银河麒麟高级服务器操作系统老V10</h3>
<h4>aarch64架构:</h4></li>
<li>polkit、polkit-devel、polkit-docs
更新 polkit 到polkit-0.112-26.el7_9.1.ns7.01或更高版本
<strong>注意点:如果查出的polkit版本是polkit-0.112-26.1.alios7.aarch64,则不用升级,如下图</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/82bb4433a602ba7cbc95b65ac210a601" alt="" />
<h4>x86_64架构:</h4></li>
<li>polkit、polkit-devel、polkit-docs
更新 polkit 到polkit-0.112-26.el7_9.1.ns7.01或更高版本
<h3>中标麒麟高级服务器操作系统 老V7</h3>
<h4>aarch64架构:</h4></li>
<li>polkit、polkit-devel、polkit-docs
更新 polkit 到polkit-0.112-26.el7_9.1.ns7.01或更高版本
<h4>x86_64架构:</h4></li>
<li>polkit、polkit-devel、polkit-doc
更新 polkit 到polkit-0.112-26.el7_9.1.ns7.01或更高版本
<h3>Debian 系列:</h3>
<p>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</p>
<h3>受影响统信UOS版本</h3>
<p>桌面专业版:通过apt policy policykit-1查看版本信息,policykit-1=0.105.10.7-1+dde此漏洞已修复。
服务器d版:通过apt policy policykit-1查看版本信息,policykit-1=0.105.10.7-1+dde此漏洞已修复。
服务器e版:通过rpm -q polkit查看版本信息,polkit=0.116-9.up1.uel20此漏洞已修复。
服务器a版:通过rpm -q polkit查看版本信息,polkit=0.115-13.uelc20.3此漏洞已修复。</p></li>
</ul>
<h1>三、漏洞检测</h1>
<h3>3.1 查看操作系统版本</h3>
<h4>Centos:</h4>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c9e4008337ce688f135f2031c1023fc1" alt="" /></p>
<h4>麒麟v10 SP2 arrch64:</h4>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c2e7652cc8818c095dc16747f6e1b962" alt="" /></p>
<h4>麒麟v10 SP1 mips64el:</h4>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/24daa5350da03020d926b9afe10399da" alt="" /></p>
<h4>银河麒麟老V10 arrch64:</h4>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/ebbcbcf0b05b9899fb5cb0cafeca2325" alt="" /></p>
<h4>统信uos V20桌面版arrch64</h4>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/152228a4717d1388faba7cf79e220fb3" alt="" /></p>
<h3>3.2 版本检测</h3>
<p>Linux系统用户可以通过查看Polkit版本来判断当前系统是否在受影响范围内,主流Linux发行版命令如下:</p>
<h4>CentOS:</h4>
<p>rpm -qa polkit
检测脚本:[polkit_check.sh](<a href="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/258539f9ce70b08e818056688674ee3d">http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/258539f9ce70b08e818056688674ee3d</a> "[polkit_check.sh")
修复前:
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/8c47f70c8198b8a0ae23fa42d66cc2dc" alt="" />
修复后:
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/dee8d9ffc0ffadfb158cbd4351417203" alt="" /></p>
<h4>Ubuntu:</h4>
<p>dpkg -l policykit-1(根据查出来的软件包版本在第二点漏洞范围里面看是否在受影响版本里面)
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/fb6b59d810aa582ed5042ef7b0b5e094" alt="" /></p>
<h1>四、漏洞防护</h1>
<h2>4.1 centos操作系统版本修复步骤</h2>
<h3>查看操作系统版本:</h3>
<p>Centos7: cat /etc/redhat-release
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/a5bb570658d7731d607e97c7591e2f61" alt="" />
上传polkit-0.112-26.el7_9.1安装包和检测脚本至/opt下
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c5f506e269a3f6c63b758e7a9e800396" alt="" />
检测polkit版本是否有漏洞:
cd /opt(切换目录)
chmod +x polkit_check.sh(增加执行权限)
./polkit_check.sh(执行检测脚本)
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/05ee89fba1383e7b189e67806e2501fe" alt="" />
重新安装
yum update -y polkit(需外网环境下)
yum update -y polkit-0.112-26.el7_9.1.x86_64.rpm(内网环境下执行)
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/0b05670658d4139258bf8f9941a305df" alt="" />
重新检测脚本:./polkit_check.sh
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/79128922f498ef41e63593e4db9189a2" alt="" /></p>
<h1><center>修复完成</center></h1>
<h2>4.2 麒麟v10 国产操作系统版本修复步骤(本文以麒麟v10 SP2 arrch64为例,其他版本除包不一致,升级步骤类似)</h2>
<p>查看操作系统版本:cat /etc/.productinfo
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/bda97fb16455d55ae9c1bc7ac7733217" alt="" />
由上图可以知道这是麒麟v10的SP2版本arrch64
找到对应安装包文件夹,将里面的rpm包上传至服务器的/opt下
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/a33aecea02feca8284975f78344ecfaf" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/eef470bc47ffa452749c5ee5499530c9" alt="" />
查看当前polkit版本:rpm -qa polkit(在第二点影响范围里面需要升级到polkit-0.116-8.p01.ky10 或更高版本)
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/846b7d0085499a35860383e40abec39b" alt="" />
重新安装最新版本(切换目录至之前上传安装包的目录下执行)</p>
<pre><code class="language-java">cd /opt
sudo yum update *.rpm</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/1c1eeb346beb6b5c870204d8ba31f8d3" alt="" />
问题:若提示安装不成功,报错如下图内容(一般在服务器不联网环境下)
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c22c9cf79b7a62eded20a25defb78bdd" alt="" />
解决方案:
cd /etc/yum.repos.d(切换yum源配置文件目录)
新建备份目录:mkdir bak
mv *.repo bak/</p>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/59b8da180465f1dc577c0dc4112f6f56" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/6d10e08321e82142b940e841e7a01ecf" alt="" />
完成后再次执行:</p>
<pre><code class="language-java">cd /opt
sudo yum update *.rpm</code></pre>
<p>重新查看升级后的版本:rpm -qa polkit
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/cea82a767586e5fd22764e1fc0e1a058" alt="" /></p>
<h1><center>修复完成</center></h1>
<h2>4.3 统信UOS V20国产操作系统版本修复步骤(本文以统信UOS V20桌面版 arrch64为例,其他版本除包不一致,升级步骤类似)</h2>
<p>查看操作系统版本:
cat /etc/issue
uname -a
cat /etc/os-version
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/b2cc9c61dea11992f21da4211cffb813" alt="" /></p>
<p>查看当前polkit版本: dpkg -l policykit-1(在第二点影响范围里面需要升级到policykit-1=0.105.10.7-1+dde此漏洞已修复)
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/25cc1590acc6f6eb6846998c0c0f83ee" alt="" />
<strong>修复建议</strong>:
桌面专业版:通过控制中心-更新-检查更新-安装更新进行升级-重启(需联网)
服务器d版:通过sudo apt update && apt dist-upgrade更新修复(需联网)
服务器e版:通过yum upgrade polkit 更新修复(需联网)
服务器a版:通过yum upgrade polkit更新修复(需联网)
也可以上传安装包直接安装(内网环境下):
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/67cbbe8618608410c94ab096aea2ad2f" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/ddc2d1a22892caf9c732ccb769c35768" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/bf0001e4f0b11590de6d067ee5d12402" alt="" /></p>
<pre><code class="language-java">上传4个deb安装包至服务器的/opt/policykit目录下
切换目录:cd /opt/policykit
安装:dpkg -i *.deb</code></pre>
<p><strong>修复验证:</strong>
桌面专业版:查看policykit-1>=0.105.10.7-1+dde,说明此漏洞已修复。
服务器d版:查看policykit-1>=0.105.10.7-1+dde,说明此漏洞已修复。
服务器e版:查看polkit>=0.116-9.up1.uel20,说明此漏洞已修复。
服务器a版:查看polkit>=0.115-13.uelc20.3,说明此漏洞已修复。
重新查看版本:dpkg -l policykit-1
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/7c5a26e6a1635ca9938103f199f35da3" alt="" /></p>
<h1><center>修复完成</center></h1>
<h2>4.4 临时缓解漏洞:</h2>
<p>在不能升级的情况下,可删除 pkexec 的 SUID-bit 权限来缓解该漏洞风险,执行命令如下:
chmod 0755 /usr/bin/pkexec</p>