【漏洞通告】Linux sudo权限提升漏洞(CVE-2021-3156)

2021.2.03

摘要

1月26日,Sudo发布安全通告,修复了一个类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞。

1 漏洞概述

1月26日,Sudo发布安全通告,修复了一个类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞。当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或 -i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。只要存在sudoers文件(通常是 /etc/sudoers),通过利用此漏洞,任何没有特权的用户都可以使用默认的sudo配置在易受攻击的主机上获得root特权(无需密码)。

Sudo是一个功能强大的实用程序,大多数(如果不是全部)基于Unix和Linux的操作系统都包含Sudo。它允许用户使用其他用户的root权限运行程序。Qualys发现的这个sudo提权漏洞已经隐藏了将近十年,它于2011年7月在一次提交中被引入(提交8255ed69),在默认配置下会影响从1.8.2到1.8.31p2的所有旧版本,以及从1.9.0到1.9.5p1的所有稳定版本。

Qualys安全研究人员已经能够独立验证漏洞并开发多种利用形式,并在Ubuntu 20.04(Sudo 1.8.31)、Debian 10(Sudo 1.8.27)和Fedora 33(Sudo 1.9.2)上获得完整的root用户特权。其他操作系统和发行版也可能会被利用。

目前漏洞细节已公开,有孚请受影响的用户尽快采取措施进行防护。包括Linux在内的几乎所有Unix主流操作系统都存在该漏洞。

参考链接:
https://www.sudo.ws/alerts/unescape_overflow.html
https://access.redhat.com/security/vulnerabilities/RHSB-2021-002

2 影响范围

2.1 受影响版本

1.8.2 – 1.8.31p2
1.9.0 – 1.9.5p1

2.2 不受影响版本

1.9.5p2

3 漏洞检测

用户可以使用非root的账户登录系统,运行“ sudoedit -s / ”命令,

1.jpg

若返回如图以“ sudoedit:”开头的错误,则当前系统可能存在安全风险。
不受影响的系统将显示以“ usage:”开头的错误响应。

4 漏洞防护

4.1 官方升级

目前官方已在sudo新版本1.9.5p2中修复了该漏洞,请受影响的用户尽快升级版本进行防护。
官方下载链接:https://www.sudo.ws/download.html

注:建议用户在升级前做好数据备份工作,避免出现意外。

4.2 临时防护措施

Red Hat相关用户若暂时无法进行升级操作,可使用systemtap进行以下临时缓解:

1. 安装所需的systemtap软件包和依赖项:

systemtap yum-utils kernel-devel-"$(uname   -r)"

RHEL 7:使用命令安装 kernel debuginfo:debuginfo-install -y kernel-"$(uname -r)"。
RHEL 8:使用命令安装 sudo debuginfo:debuginfo-install sudo。

2. 创建以下systemtap脚本(将文件命名为sudoedit-block.stap):

probe     process("/usr/bin/sudo").function("main") {

        command =     cmdline_args(0,0,"");

        if   (strpos(command,   "edit") >= 0) {

                  raise(9);

        }

}

3. 使用以下命令安装脚本:(使用root权限)

# nohup stap -g sudoedit-block.stap &

该脚本将使得易受攻击的sudoedit二进制文件停止工作。sudo命令仍将照常执行。
注:上述更改在重启后失效,必须在每次重启后重新应用。

4. 一旦安装了补丁程序,就可以通过取消systemtap进程来删除systemtap脚本。例如,通过使用以下命令(其中7590是systemtap进程的PID):

# kill -s SIGTERM 7590