游客发表

polkit pkexec 本地提权漏洞怎么修复

发帖时间:2026-10-17 05:10:40

polkit 的本地 pkexec 本地提权漏洞(CVE-2021-4034,俗称 PwnKit)在 2022 年 1 月被公开时,提权几乎打穿了所有主流 Linux 发行版。漏洞攻击者只需一个普通的修复用户账户,运行一段十几行的本地 C 代码,就能直接拿到 root shell。提权我亲眼在 Ubuntu 20.04 和 CentOS 7 上复现过,漏洞整个过程不到三秒,修复连密码都不用输。本地

这个漏洞的提权根子出在 pkexec 对参数列表的处理上。它错误地信任了环境变量,漏洞导致可以越界写入,修复进而执行任意代码。本地说白了,提权是漏洞 C 语言老毛病——没检查边界。但你别指望自己改源码,那是发行版厂商的事。你要做的,是立刻把手头机器的漏洞堵上。

最直接的修复办法是升级系统包。对 Debian/Ubuntu 系,跑 sudo apt update && sudo apt upgrade policykit-1。对 RHEL/CentOS/Fedora,跑 sudo yum update polkit 或 sudo dnf update polkit。升级完重启一下相关服务,或者干脆重启机器,确保新版本生效。这里有个坑:有些云镜像的软件源没同步最新包,你得多等几小时再刷一次。我遇到过升级后版本号没变的情况,那是因为源里还是旧包,得换官方源或等镜像刷新。

如果因为某些原因暂时没法升级,比如生产环境不敢乱动,那就先打临时补丁。最常用的一招是移除 pkexec 的 SUID 位:sudo chmod 0755 /usr/bin/pkexec。这会让普通用户失去通过 pkexec 提权的路径,但也会连带影响一些依赖图形界面授权弹窗的程序,比如某些桌面环境里的挂载操作。副作用是功能降级,但保命要紧。等补丁包就绪后,记得用 sudo chmod 4755 /usr/bin/pkexec 把权限改回来。

另外,别忽略另一个简单粗暴的招:直接卸载不需要的 polkit 组件。很多服务器根本没跑桌面环境,pkexec 纯粹是摆设。你可以在 Debian 系上 sudo apt purge policykit-1,在 RHEL 系上 sudo yum remove polkit。卸之前先确认没有其他关键服务依赖它,比如某些网络管理工具或定时任务。我有个朋友在无头服务器上这么干了,运行半年没出任何问题。

还有个容易被忽视的点:容器环境。Docker 容器里如果跑的是老镜像,里面的 pkexec 同样有漏洞。虽然容器默认限制了提权能力,但如果你用了 privileged 模式或者没配 seccomp,攻击者照样能利用。检查所有运行中的容器,docker ps 后逐个进容器看 pkexec 版本,该升级升级,该删就删。别因为觉得“容器隔离了”就放松警惕。

最后说句实在话,这类漏洞每隔一两年就会爆一个,polkit 不是第一次也不会是最后一次。你光修这一个没用,得把系统更新机制跑顺。配置 unattended-upgrades 自动装安全补丁,或者至少每周手动刷一次更新。我见过太多机器,平时不更新,一出事就手忙脚乱。这次是 pkexec,下次可能是 sudo,或者 systemd。把补丁这事儿变成习惯,比啥都强。

    热门排行

    友情链接