Linux polkit CVE-2021-4034 漏洞检测与修复指南
CVE-2021-4034(俗称 PwnKit)漏洞存在于 polkit 组件的 pkexec 工具中,而非 Linux 内核。修复核心是升级 polkit 包,若无法升级则需临时移除 pkexec 的 setuid 权限。
先说结论:这是一个本地提权漏洞,影响绝大多数 Linux 发行版,优先通过系统包管理器更新 polkit 即可修复。
- 先判断:检查 pkexec 版本及是否拥有 setuid 权限
- 优先做:使用 apt/yum/dnf 升级 polkit 到安全版本
- 再验证:确认版本已更新或 setuid 位已移除
命令速用版
如果你需要快速检查和处理,可以参考以下命令。请根据实际发行版选择包管理命令。
# 1. 检查 pkexec 版本
pkexec `--version`
# 2. 检查权限(查看是否有 s 权限位)
ls -l /usr/bin/pkexec
# 3. Ubuntu/Debian 升级命令
sudo apt update && sudo apt install `--only-upgrade` polkit
# 4. CentOS/RHEL 升级命令
sudo yum update polkit
# 5. 临时缓解(无法升级时移除 setuid 位)
sudo chmod 0755 /usr/bin/pkexec安全版本对照
不同发行版修复版本号可能不同,请以官方公告为准。上游修复版本为 0.121。
| 发行版 | 安全版本参考 | 备注 |
|---|---|---|
| Upstream polkit | >= 0.121 | 上游基准 |
| Ubuntu 20.04 | 0.105-26ubuntu1.2 | 参考 USN-5252-1 |
| CentOS 7 | polkit-0.112-22.el7_9.1 | 需更新到最新补丁包 |
| Debian 11 | 0.105-31+deb11u1 | 参考 DSA-5063 |
漏洞原理简述
CVE-2021-4034 漏洞点不在 Linux 内核本身,而在用户态的 polkit 组件中。pkexec 默认以 setuid root 方式运行,允许普通用户以 root 权限执行命令。由于在处理环境变量时存在内存破坏漏洞,攻击者可以通过构造特定的环境变量,诱使 pkexec 执行任意代码并获得 root 权限。几乎所有默认安装 polkit 的发行版都在影响范围内。
分步处理
按照以下步骤操作,确保修复过程可控。
第一步:确认受影响情况
运行 pkexec `--version`。如果版本低于 0.121(上游修复版本),或者你的发行版安全公告指出当前版本受影响,则需要处理。同时运行 ls -l /usr/bin/pkexec,如果输出中包含 s(如 -rwsr-xr-x),说明存在提权风险。
第二步:应用官方补丁
优先使用发行版提供的更新。更新前建议备份重要数据。执行上述“命令速用版”中的升级命令。如果源中没有最新包,请检查是否启用了安全更新源。
第三步:临时缓解措施
如果因业务限制无法立即升级,可以移除 setuid 位。执行 sudo chmod 0755 /usr/bin/pkexec。这会让 pkexec 失去以 root 身份运行的能力,从而阻断漏洞利用,但可能会影响依赖 polkit 进行权限认证的图形界面工具。
批量检测脚本
若需多台服务器快速排查,可使用以下脚本片段:
#!/bin/bash
if [ -u /usr/bin/pkexec ]; then
echo "[WARN] pkexec has setuid bit set. Vulnerable or unpatched."
pkexec `--version`
else
echo "[OK] pkexec setuid bit not set."
fi怎么验证是否生效
修复后需要确认状态。
1. 验证版本:再次运行 pkexec `--version`,确认版本号已变更为发行版标注的安全版本。不同发行版版本号可能不同,请以官方公告为准。
2. 验证权限:运行 ls -l /usr/bin/pkexec。如果已升级,setuid 位通常保留但代码已修复;如果做了临时缓解,应显示 -rwxr-xr-x 且无 s 位。
3. 日志检查:查看 /var/log/auth.log 或 /var/log/secure,确认没有异常的 pkexec 调用记录。异常提权通常会有记录。
修复后业务兼容性测试清单
若采用了临时缓解措施(移除 setuid),请重点测试以下功能:
- 图形界面权限弹窗:尝试打开系统设置、网络配置等需要提权的 GUI 工具,确认是否报错。
- 关机/重启按钮:部分桌面环境依赖 polkit 进行电源管理权限验证。
- 自定义管理脚本:检查是否有脚本调用
pkexec执行特权命令。 - 容器平台:若宿主机修复,确认容器内业务不依赖宿主机的 polkit 二进制文件。
常见坑
- 误以为是内核漏洞:更新内核无法修复此问题,必须更新 polkit 包。
- 临时措施影响业务:移除 setuid 位后,部分需要特权认证的桌面工具或管理脚本可能失效,生产环境需谨慎评估。
- 源地址不可信:升级时确保软件源是官方或可信镜像,避免引入其他风险。
- 容器环境:容器内若共享宿主机的二进制文件,需在宿主机修复,或确保容器内 polkit 独立且已更新。
参考来源
- NVD - CVE-2021-4034 Detail: https://nvd.nist.gov/vuln/detail/CVE-2021-4034
- Qualys Security Advisory - PwnKit: https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
- Ubuntu Security Notice - USN-5252-1: https://ubuntu.com/security/notices/USN-5252-1