说明

可以使普通用户通过一条命令提权到管理员用户

影响范围

1.8.28之前的所有 Sudo 版本均受影响

解析

抄过来的

利用该漏洞要求用户具有 sudo 权限,从而以任意用户 ID 运行命令。一般而言,这意味着用户的 sudoers 条目在 Runas 规范中具有特殊值 ALL。Sudo 支持在 sudoers 策略允许的情况下,以用户指定的名称或用户 ID 运行命令。
例如,如下 sudoers 条目允许 id 命令以任意用户身份运行,因为它包含 Runas 规范中的关键字 ALL。
myhost alice = (ALL) /usr/bin/id
用户不仅能够以其它合法用户身份运行该 id 命令,还能使用 #uid 语法以任意用户 ID 运行该命令
例如:sudo -u#1234 id -u
将返回1234,然而,sudo 在运行命令前用户修改用户 ID 的setresuid(2) 和 setreuid(2)系统调用将特殊对待用户 ID为-1(或其未签名的等同值 4294967295)而且并不会修改该值的用户 ID。因此,
sudo -u#-1 id -u或 sudo -u#4294967295 id -u
实际上会返回 0。这是因为 sudo命令本身就已经以用户 ID 为0 运行,因此当 sudo 试图将用户 ID 修改成 -1时,不会发生任何变化。这就导致 sudo 日志条目将该命令报告为以用户 ID 为 4294967295而非 root (或者用户ID为 0)运行命令。此外,由于通过–u 选项指定的用户 ID 并不存在于密码数据库中,因此不会运行任何 PAM 会话模块。如果sudoers 条目被写入允许用户以除 root 身份以外的用户身份运行命令,则可利用该 bug 绕过该限制。
例如,给定如下 sudoers 条目:myhost bob = (ALL, !root) /usr/bin/vi用户 bob 被允许以除了 root以外的其它用户身份运行 vi。
然而,由于存在该漏洞,bob 实际上能够通过运行 sudo –u#-1 ui 的方式以 root 身份运行 vi,从而违反了安全策略。
只有Runas 规范中存在关键字 ALL 的sudoers 条目受影响。
例如,如下sudoers 条目并不受影响:myhost alice = /usr/bin/id在这个例子中,alice仅被允许以 root身份运行 id 命令。任何以其它用户身份运行该命令的尝试都将遭拒绝。

POC

sudo -u#-1 命令 或者 sudo -u#4294967295 命令

复现

使用的是ubantu的虚拟机进行的测试,非常的简单,就配一张图把~

CVE-2019-14287 漏洞分析-JE2Se ' Blog

这个真的是我见过提权最快的了~~~~