Linux 内核 CVE-2021-4034 漏洞怎么检测与升级补丁

文章导读
CVE-2021-4034(俗称 PwnKit)漏洞存在于 polkit 组件的 pkexec 工具中,而非 Linux 内核。修复核心是升级 polkit 包,若无法升级则需临时移除 pkexec 的 setuid 权限。
📋 目录
  1. 命令速用版
  2. 安全版本对照
  3. 漏洞原理简述
  4. 分步处理
  5. 批量检测脚本
  6. 怎么验证是否生效
  7. 修复后业务兼容性测试清单
  8. 常见坑
  9. 参考来源
A A

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.040.105-26ubuntu1.2参考 USN-5252-1
CentOS 7polkit-0.112-22.el7_9.1需更新到最新补丁包
Debian 110.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),说明存在提权风险。

第二步:应用官方补丁
优先使用发行版提供的更新。更新前建议备份重要数据。执行上述“命令速用版”中的升级命令。如果源中没有最新包,请检查是否启用了安全更新源。

Linux 内核 CVE-2021-4034 漏洞怎么检测与升级补丁

第三步:临时缓解措施
如果因业务限制无法立即升级,可以移除 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