CVE-2021-4034漏洞仅取决于pkexec是否具备SUID权限及polkit包版本是否在修复范围内,与内核版本无关;需依次检查which pkexec路径、ls -l权限含-rwsr-xr-x、rpm/dpkg包版本≥修复版本,并用PoC脚本最终验证。

直接查 pkexec 版本和 SUID 权限状态,比看内核版本有用得多——CVE-2021-4034 根本不依赖内核,它只跟 polkit 包里的 pkexec 二进制是否带 SUID、是否在漏洞版本范围内有关。
确认 pkexec 是否存在且具备 SUID 权限
漏洞利用的前提是攻击者能执行到有 root 权限的 pkexec。如果它被删了、没设 SUID,或根本没装,那就不受影响。
- 运行
which pkexec,确认路径(通常是/usr/bin/pkexec) - 检查权限:
ls -l $(which pkexec),输出中必须含-rwsr-xr-x(即第 4 位是s) - 若显示
no such file or directory或权限里没有s,基本可排除直接利用风险
验证 polkit 包版本是否在漏洞范围内
不同发行版修复版本不同,不能只看大版本号;CentOS 7 的修复起点是 polkit-0.112-26.el7_9.1,低于这个就危险。
- CentOS/RHEL:
rpm -q polkit,结果需 ≥ 对应修复版本(如polkit-0.112-26.el7_9.1) - Ubuntu/Debian:
dpkg -l | grep policykit-1,比对官方公布的修复版本(如 Ubuntu 20.04 需 ≥0.105-26ubuntu1.2) - 注意:
pkexec --version显示的是 Polkit 库版本,不是包版本,不可靠;必须用包管理器查
用 PoC 脚本做最终行为验证
版本号可能被手动降级或打补丁但未更新元数据,最稳妥的方式是跑一次轻量级检测脚本——它不提权,只判断能否触发漏洞路径。
- 从可信源获取检测脚本,例如:
curl -s https://raw.githubusercontent.com/zhzyker/CVE-2021-4034/main/cve-2021-4034.sh | bash - 脚本会尝试构造空
argv并调用pkexec,观察是否崩溃或返回特定错误码(如Segmentation fault或Aborted) - 若输出
Vulnerable或进程异常退出,说明漏洞仍可被触发;Not vulnerable才算真正修复 - 注意:该脚本本身不写文件、不启进程、不改环境,仅做内存访问探测,可在生产环境谨慎运行
为什么不能只看 /proc/version 或 uname -r
这个漏洞与 Linux 内核版本完全无关。它出在用户态的 pkexec 程序里,哪怕你用的是 6.12 内核,只要 polkit 包没升级,照样中招。
-
uname -r返回的是内核版本,对 CVE-2021-4034 检测无意义 - 有些扫描工具误把“系统运行在旧内核”当作风险依据,这是典型归因错误
- 真正要盯死的是
pkexec文件的磁盘路径、权限、所属包版本这三项
最容易被忽略的一点:补丁更新后,pkexec 二进制文件可能被缓存或被 systemd-coredump 保留旧副本,建议更新后执行 find /usr -name pkexec -exec ls -l {} \; 全盘确认,别只信 which 返回的那个路径。


















