游客发表

polkit pkexec 本地提权漏洞

发帖时间:2026-10-17 04:40:07

2021年1月25日,本地安全研究员Andreas Kling在推特上晒出一段视频——他在自己的提权Ubuntu系统上敲了几行命令,瞬间就拿到了root权限。漏洞攻击目标不是本地某个冷门软件,而是提权polkit的pkexec,这个组件几乎存在于所有主流Linux发行版中,漏洞从Ubuntu到CentOS,本地从Debian到Fedora,提权无一幸免。漏洞漏洞编号CVE-2021-4034,本地江湖人称“PwnKit”。提权

pkexec是漏洞polkit框架里的一个程序,负责以特权身份执行命令。本地它有个致命毛病:对参数个数处理不当。提权当用户调用pkexec时,漏洞如果故意不传参数,程序会试图执行环境变量中的“可信”路径。问题是,攻击者完全可以控制这些环境变量。利用这个缺陷,攻击者能把恶意代码注入到pkexec的执行流程里,直接以root身份运行。整个过程不需要密码,不需要特殊权限,只要能在本机执行任意命令就行。

更糟糕的是,这个漏洞在代码仓库里躺了整整十二年。从2009年引入,一直到2021年被发现,期间没有任何人注意到这个隐患。Red Hat的工程师后来分析时承认,修复方法很简单——检查参数个数是否小于1,如果小于1就直接报错退出。就这么几行代码的事,硬是让攻击者白捡了十二年的root权限。

漏洞公布后,各大发行版连夜打补丁。但实际操作中,很多服务器管理员根本没意识到自己中招了。原因很简单,pkexec平时很少被直接调用,大多数应用都是通过polkit的D-Bus接口间接使用它。系统日志里不会出现异常记录,入侵检测系统也捕捉不到明显特征。攻击者利用这个漏洞提权后,可以悄无声息地安装后门、窃取敏感数据,然后抹掉痕迹。

我见过不少运维人员,总觉得自己用的是最小化安装,不装图形界面就安全了。可PwnKit偏偏是个命令行工具,跟图形界面没半点关系。哪怕你的服务器只跑着SSH服务,只要安装了polkit——而它默认就是系统组件——就暴露在风险中。有些容器镜像也中招了,因为很多基础镜像都包含polkit。Docker容器里提权,宿主机也跟着遭殃,容器隔离形同虚设。

有意思的是,这个漏洞的发现过程纯属偶然。Andreas Kling当时正在研究自己的浏览器引擎项目,需要调试某些系统调用,随手测试了pkexec的行为,结果发现了异常。他后来在博客里写道:“我只是想看看这个程序对异常输入会有什么反应,没想到直接拿到了root。”这提醒我们,安全漏洞往往藏在最不起眼的角落里,而发现它们的人,有时只是多问了一句“如果这样会怎样”。

修复补丁在2022年1月25日发布,恰好是漏洞公开一周年。但直到今天,仍有大量未打补丁的系统在运行。扫描数据显示,2023年仍有约15%的互联网Linux服务器存在PwnKit漏洞。这些服务器的管理员大概觉得,反正自己不是高价值目标,黑客不会专门找上门。可网络攻击从来都是自动化的,扫描器会遍历整个IP段,发现一个打一个。你觉得自己不值得被攻击,但僵尸网络不这么想。

一个简单的边界检查缺失,封存了十二年的隐患,最终酿成影响几乎所有Linux系统的安全事件。没什么高深的技术,没什么复杂的利用链,就是程序员少写了一行判断。安全界有句老话:最危险的漏洞不是最复杂的那个,而是最容易被忽视的那个。PwnKit完美诠释了这句话。

    热门排行

    友情链接