PwnKit 的概念验证,polkit 的 pkexec 中的一个本地权限提升漏洞。在默认安装下,任何非特权本地用户都可以成为 root。
存在漏洞的 pkexec 版本会错误处理进程参数计数。这使得受控的环境变量被重新引入 pkexec 的环境,最终以 root 身份运行攻击者控制的共享对象。该漏洞由 Qualys 研究团队于 2022 年 1 月 25 日披露,CVSS v3.1 评分为 7.8(高危)。NVD 条目为 CVE-2021-4034。
实际上,自 2009 年以来,几乎所有 polkit 版本都受到影响,直到协同修复完成。各发行版在披露日期当天或之后发布了修复包,因此请保持供应商更新为最新。
这是一个针对已充分记录、公开披露漏洞的教育参考。我用它来研究 pkexec 的参数处理缺陷,在授权实验室和评估中验证补丁状态,并保存检测与修复笔记。
仅在您拥有或获授权测试的系统上运行。
gcc cve-2021-4034-poc.c -o cve-2021-4034-poc
./cve-2021-4034-poc
在存在漏洞的主机上,它会为您提供一个 root shell。已在 Debian 10 buster 和 CentOS 7 上验证。
将 polkit 和 pkexec 修补到发行版的修复版本。如果无法立即修补,请移除 pkexec 二进制文件上的 SUID 位(使用 chmod 0755),同时接受您将失去 pkexec 权限委派功能。在检测方面,请在出现 root shell 之前,对 pkexec 以空 argv 运行或带有异常环境(如 GCONV_PATH、CHARSET 或 SHELL)的情况发出告警。
该漏洞由 Qualys 研究团队发现并负责任地披露。
oss-security 通告:https://seclists.org/oss-sec/2022/q1/80
此代码仅出于研究和授权安全测试目的发布。在您不拥有或未获得书面许可的系统上运行它属于违法行为,可能承担刑事和民事责任。请在您自己的实验室中或依据已签署的授权测试范围内使用它。您需对使用此代码的行为负责。