CVE-2021-3156
Background
sudo的一个堆溢出漏洞
搭个环境
从这里下个老版本的源码, 我选择了Sudo 1.9.5p1
, 即上一个release版本.
clone下来以后, 回退到指定版本
git reset --hard e60ff9058b65f12652847316ec81954b4bce7bbe
然后设置安装路径
./configure prefix=/home/ubuntu/Desktop/cve-2021-3156
改一哈源码, 在漏洞点(plugins/sudoers/sudoers.c line 971)
的地方加一个pause, 方便gdb连上去看
编译
make && make install
细节
360的公众号给出的漏洞验证方法是sudoedit -s /
, 输出sudoedit: /: not a regular file
表明存在漏洞, 看一下sudoedit
是用来安全编辑一个系统文件的, 流程是先把目标文件复制一份到tmp, 然后启动编辑器编辑, 再把保存的文件覆盖回去, 不用全程保持root权限, 更加安全. 而-s, --shell: run shell as the target user; a command may also be specified
表示用一个目标用户来开一个新的shell.
公开文章中表示, 如果sudo以一个shell模式运行(shell -c), 即通过-s
来设置shell模式, 或者通过-i
来设置shell模式和shell登录模式, 查资料可知
- sudo -i,加载用户变量,并跳转到目标用户home目录;
- sudo -s,不加载用户变量,不跳转目录;
在sudo的main函数中, parse_args()函数会重写argv, 然后通过\
转义所有的元字符(\n
之类的)
更新
有大佬发了exp, 看了一下是利用tcache的, 即libc2.31+版本, 最近忙着找工作先鸽了, 有时间再写
Reference
- https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
- https://www.cnblogs.com/wzk-0000/p/11083008.html
- https://www.kalmarunionen.dk/writeups/sudo/
- https://datafarm-cybersecurity.medium.com/exploit-writeup-for-cve-2021-3156-sudo-baron-samedit-7a9a4282cb31
- https://bestwing.me/CVE-2021-3156-analysis..html