一. 简介
2021年1月26日,Linux安全工具sudo被发现严重的基于堆缓冲区溢出漏洞。利用这一漏洞,攻击者无需知道用户密码,一样可以获得root权限,并且是在默认配置下。此漏洞已分配为CVE-2021-3156,危险等级评分为7分。
当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。因此只要存在sudoers文件(通常是/etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。研究人员利用该漏洞在多个Linux发行版上成功获得了完整的root权限,包括Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2),并且sudo支持的其他操作系统和Linux发行版也很容易受到攻击。
目前漏洞细节已公开,请受影响的用户尽快采取措施进行防护。
二. 影响版本
Sudo 1.8.2 – 1.8.31p2
Sudo 1.9.0 – 1.9.5p1
三. 漏洞检测
首先以非root用户的身份登录,并运行“sudoedit -s /”命令。
有漏洞的系统会抛出一个以“sudoedit:”开头的错误,而打过补丁的系统则会显示一个以“usage:”开头的错误。
四. 防御建议
1. 官方升级
目前官方已在sudo新版本1.9.5p2中修复了该漏洞,请受影响的用户尽快升级版本进行防护,官方下载链接:https://www.sudo.ws/download.html
注:建议用户在升级前做好数据备份工作,避免出现意外
2.临时防护措施
Red Hat相关用户若暂时无法进行升级操作,建议使用以下方法缓解:
1). 安装所需的systemtap软件包和依赖项:
systemtap yum-utils kernel-devel-"$(uname -r)"
RHEL 7安装命令:
kernel debuginfo:debuginfo-install-y kernel-"$(uname -r)"
RHEL 8安装命令:
sudodebuginfo:debuginfo-installsudo
2). 创建以下系统调用脚本:(将文件命名为sudoEd-lock.stap)
<code><span style="padding:0px; max-width:1000%;">probe process(<span style="padding:0px; max-width:1000%; color:rgb(221, 17, 68);">"/usr/bin/sudo"</span>).<span style="padding:0px; max-width:1000%; color:rgb(202, 125, 55);">function</span>(<span style="padding:0px; max-width:1000%; color:rgb(221, 17, 68);">"main"</span>) {</span></code><code><span style="padding:0px; max-width:1000%;"><br></span></code><code><span style="padding:0px; max-width:1000%;"> <span style="padding:0px; max-width:1000%; color:rgb(202, 125, 55);">command</span> = cmdline_args(0,0,<span style="padding:0px; max-width:1000%; color:rgb(221, 17, 68);">""</span>);</span></code><code><span style="padding:0px; max-width:1000%;"><br></span></code><code><span style="padding:0px; max-width:1000%;"> <span style="padding:0px; max-width:1000%; color:rgb(202, 125, 55);">if</span> (strpos(<span style="padding:0px; max-width:1000%; color:rgb(202, 125, 55);">command</span>, <span style="padding:0px; max-width:1000%; color:rgb(221, 17, 68);">"edit"</span>) >= 0) {</span></code><code><span style="padding:0px; max-width:1000%;"><br></span></code><code><span style="padding:0px; max-width:1000%;"> raise(9);</span></code><code><span style="padding:0px; max-width:1000%;"> }</span></code><code><span style="padding:0px; max-width:1000%;">}</span></code>
3). 使用以下命令安装脚本:(使用root权限)
nohupstap -g sudoedit-block.stap &
该脚本将使得易受攻击的sudoedit二进制文件停止工作。Sudo命令仍然可以正常工作。
注:上述修改在重启后失效,必须在每次重启后重新应用。
一旦安装了新的补丁包,系统分页脚本就可以被删除,可以通过取消systemtap进程来删除systemtap脚本。例如,通过执行以下命令:
kill-s SIGTERM 7590 (where 7590 is the PID of the systemtap process)
警告:不要试图通过删除符号链接来禁用sudo编辑,因为这不是一个好的缓解选项。
五. 参考链接
https://access.redhat.com/security/vulnerabilities/RHSB-2021-002
https://www.sudo.ws/alerts/unescape_overflow.html
来源:freebuf.com 2021-04-08 11:03:02 by: 星河工业安全
请登录后发表评论
注册