深入剖析 CVE-2021-3560 与 CVE-2021-4034:原理、区别与联系

发布于:2025-06-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

CVE-2021-3560 和 CVE-2021-4034 是 2021 年曝光的两个 Linux 本地权限提升漏洞,均涉及 Polkit 组件。由于它们影响广泛且利用门槛较低,迅速引起安全社区关注。本文将深入分析这两个漏洞的技术原理、影响范围、区别与联系,并结合实际案例,提供缓解措施及安全建议。


1. CVE-2021-3560:Polkit 认证绕过漏洞

1.1 漏洞原理

CVE-2021-3560 是一个 认证绕过漏洞,源于 Polkit 处理 DBus 消息时的逻辑缺陷。Polkit(PolicyKit)是 Linux 权限管理框架,通过 DBus 与客户端通信。当用户使用 pkexec 提权时,Polkit 需要验证其权限。

漏洞出现在 Polkit 处理 中断请求 时的逻辑错误:

  1. 用户发起特权请求(如 pkexec --user nobody)。
  2. 在 Polkit 处理该请求的过程中,攻击者通过 SIGTERM 终止进程。
  3. Polkit 未能正确清理状态,导致后续请求被误认为已通过认证,从而赋予 root 权限。

1.2 技术细节

漏洞位于 polkitd 处理 DBus 消息的逻辑中,涉及 GLib 的 GMainLoop 事件处理机制。由于 PolkitSubject 对象在认证中断后未释放,导致状态混淆。

攻击者可使用以下 PoC(概念验证代码)来利用该漏洞:

for i in {1..100}; do (pkexec --user nobody bash &); sleep 0.01; killall -9 pkexec; done

此代码利用竞态条件,不断中断 pkexec 进程,使得认证状态失效,从而绕过权限检查。

1.3 影响范围

  • 受影响版本:Polkit 0.113 至 0.118。
  • 受影响系统:Ubuntu 20.04、Debian 10、Fedora 34 等主流发行版。
  • CVSS 评分:7.8(高危)。
  • 利用门槛:需要本地用户权限,但无需特殊权限。
  • 修复方案:漏洞于 2021 年 6 月 3 日公开,0.119 版本修复了状态清理问题。

2. CVE-2021-4034:pkexec 本地提权漏洞

2.1 漏洞原理

CVE-2021-4034(“PwnKit”)是 pkexec 二进制文件中的 本地提权漏洞,源于参数处理错误。

pkexec 运行时:

  1. argc == 1(无参数),则 pkexec 试图解析参数。
  2. 由于缺少边界检查,pkexec 试图从环境变量加载动态库,如 GCONV_PATH
  3. 攻击者可伪造共享库,使其以 root 权限执行任意代码。

2.2 技术细节

pkexec 源码中的 main() 函数对 argv 处理不当:

int main(int argc, char *argv[]) {
  if (argc < 2) {
    char *path = g_find_program_in_path(argv[0]);
    setlocale(LC_ALL, ""); // 触发 GCONV_PATH 加载
  }
}

攻击者可以这样利用:

export GCONV_PATH=./malicious_dir
gcc -shared -fPIC -o malicious.so exploit.c
pkexec

pkexec 会加载恶意库 malicious.so,以 root 权限执行其中的代码。

2.3 影响范围

  • 受影响版本:Polkit 0.105 及之后所有版本(漏洞自 2009 年引入)。
  • 受影响系统:几乎所有 Linux 发行版(Ubuntu、Debian、CentOS、RHEL 等)。
  • CVSS 评分:7.8(高危)。
  • 利用门槛:本地用户可直接利用,无需竞态条件。
  • 修复方案:2022 年 1 月 25 日披露,0.120 版本修复该问题。

3. CVE-2021-3560 与 CVE-2021-4034 的区别与联系

3.1 主要区别

漏洞编号 攻击目标 触发方式 技术要求 影响范围
CVE-2021-3560 Polkit DBus 竞争条件 需要精准时序 影响 2019-2021 年的系统
CVE-2021-4034 pkexec 确定性利用 仅需环境变量 影响 2009 年以来所有系统

3.2 共同点

  • 都涉及 Polkit 权限管理机制。
  • 都可用于本地权限提升,从普通用户提权至 root。
  • 都已被黑客利用,成为实际攻击场景中的重要漏洞。
  • 都已通过软件更新修复,建议立即升级系统。

4. 防御与缓解措施

4.1 更新系统

  • CVE-2021-3560:升级至 Polkit 0.119 或更高。
  • CVE-2021-4034:升级至 Polkit 0.120 或更高。

4.2 临时缓解方案

  • 移除 pkexec 的 setuid 权限
    chmod u-s /usr/bin/pkexec
    
  • 禁用 Polkit 服务(适用于无 GUI 服务器)
    systemctl stop polkit && systemctl disable polkit
    

4.3 监控与检测

  • 检查 pkexec 的异常调用日志:
    journalctl -xe | grep pkexec
    
  • 使用 SELinuxAppArmor 限制 pkexec 访问权限。

5. 结论

CVE-2021-3560 和 CVE-2021-4034 展示了 Linux 权限管理的两个关键问题:

  • 认证绕过(CVE-2021-3560)
  • 输入验证不足(CVE-2021-4034)

其中,CVE-2021-4034 影响所有主流 Linux 发行版,危害更大。建议 Linux 用户立即更新系统,实施必要的防御措施,以防止本地提权攻击。


网站公告

今日签到

点亮在社区的每一天
去签到