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号