通过 polkit 中的条件竞争提升权限。
CVE-2021-3560 是 polkit 中的一个条件竞争,允许未经授权的本地用户获取 root 权限。该漏洞存在于 polkit 在连接中断时处理 D-Bus 错误的方式中。
要确定最佳时间,请执行以下命令:
time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:testuser string:"Test User" int32:1
在代码中使用实际时间的一半 ± 0.003 的范围。
为什么时间很重要?
如果终止进程过早——请求将无法发送
如果终止得太晚——polkit 将有时间检查授权并拒绝
需要命中“黄金窗口”,此时 polkit 已收到请求,但尚未检查授权
漏洞利用如何工作?
发送 D-Bus 请求创建用户,参数为 int32:1(添加到 wheel 组)
在半途中中断请求(条件竞争)
polkit 来不及完成授权检查
D-Bus 找不到发送者
polkit 错误地处理该错误,并分配 UID = 0(root)
用户无需认证即被创建
发送为新用户设置密码的请求(使用相同的时间)
成功统计
用户可以在 1-2 次尝试内创建
分配密码需要更多尝试
100 次迭代可获得很高的成功概率
如果漏洞利用不生效,请尝试:
在代码中扩大 TIMING_RANGE
多次运行脚本
确保您在 SSH 会话中(而不是在图形界面中)