Linux Sudo 权限绕过误差清静通告
宣布时间 2019-10-15误差编号和级别
CVE编号:CVE-2019-14287,危险级别:高危,CVSS分值:官方未评定
影响版本
Sudo 1.8.28之前的所有版本
误差概述
Sudo 的全称是“superuserdo”,它是Linux系统管理指令,允许用户在不需要切换情形的条件下以其它用户的权限运行应用程序或下令,通常是以 root 用户身份运行下令,以镌汰 root 用户的登录和管理时间,同时提高清静性。
该误差是 sudo清静战略绕过问题,可导致恶意用户或程序在目的 Linux 系统上以 root 身份执行恣意下令,纵然 “sudoers configuration” 明确榨取该 root会见权限也不破例。
使用该误差要求用户具有 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 vi 的方法以 root 身份运行 vi,从而违反了清静战略。只有Runas 规范中保存要害字 ALL 的sudoers 条目受影响。例如,如下sudoers 条目并不受影响:
myhost alice = /usr/bin/id
在这个例子中,alice仅被允许以 root身份运行 id 下令。任何以其它用户身份运行该下令的实验都将遭拒绝。
此误差是管理员在设置文件中用了ALL要害词后造成的。但默认的sudo设置文件不受影响。
误差验证
复现情形:
当/etc/sudoers文件保存如下形式的设置会导致误差的爆发:
修复建议
官方已经推出清静更新,请更新至1.8.28版本:https://www.sudo.ws/download.html。
以下为各厂商给出的通告及建议:
Red Hat Enterprise Linux / CentOS
https://access.redhat.com/security/cve/CVE-2019-14287
Ubuntu
https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2019-14287.html
SUSE / openSUSE
https://www.suse.com/security/cve/CVE-2019-14287.html
参考链接
https://www.sudo.ws/alerts/minus_1_uid.html


京公网安备11010802024551号