最早出处
漏洞最早由Qualys
研究小组发现的,博客地址:
https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
漏洞成因
上面博客中写道是基于堆溢出产生的漏洞,但是细节是触发漏洞需要这样做
- either through the
-s
option, which sets Sudo’sMODE_SHELL
flag;- OR through the
-i
option, which sets Sudo’sMODE_SHELL
and MODE_LOGIN_SHELL flags;
要么-s
要么-i
,设置flag
为MODE_SHELL
sudoedit -s
命令含义:
执行环境变量中所指定的 shell ,或是 /etc/passwd 里所指定的shell
正常MODE_SHELL
的flag
情况下,会转义字符,但是文章中表示如果以非sudo
的身份执行sudoedit
,flag会|=MODE_EDIT
,并且MODE_EDIT不会
被重置
,此时就会拥有MODE_EDIT|MODE_SHELL
的flag
,绕过了转义
。
POC1
https://github.com/blasty/CVE-2021-3156
这个poc它只写了ubuntu和debian的复现,代码看起来也很容易理解。
target_t targets[] = {
{
// Yes, same values as 20.04.1, but also confirmed.
.target_name = "Ubuntu 18.04.5 (Bionic Beaver) - sudo 1.8.21, libc-2.27",
.sudoedit_path = SUDOEDIT_PATH,
.smash_len_a = 56,
.smash_len_b = 54,
.null_stomp_len = 63,
.lc_all_len = 212
},
{
.target_name = "Ubuntu 20.04.1 (Focal Fossa) - sudo 1.8.31, libc-2.31",
.sudoedit_path = SUDOEDIT_PATH,
.smash_len_a = 56,
.smash_len_b = 54,
.null_stomp_len = 63,
.lc_all_len = 212
},
{
.target_name = "Debian 10.0 (Buster) - sudo 1.8.27, libc-2.28",
.sudoedit_path = SUDOEDIT_PATH,
.smash_len_a = 64,
.smash_len_b = 49,
.null_stomp_len = 60,
.lc_all_len = 214
}
};
其中包含3个已经写好的目标系统,当然它也支持手动的设置这些,看图:
漏洞触发关键点,我圈出来了
POC2
https://github.com/stong/CVE-2021-3156
分析思路:
思路很秀,它是加了一个-A
选项
sudoedit -A
:通常情况下,如果需要密码,它会从用户终端读取。 当设置了-A选项,读取用户的密码和输出密码到标准输出
你可以理解为它会将一个假的/etc/passwd覆盖到原文件的效果,这样你当前的账户可以被你自己伪造成任意uid。
写在最后
很多公众号都在蹭热度啊,明写centos不会中招,只有ubuntu会中招,拿到poc起码看看再下结论吧,漏洞起因是sudoedit,直接下个只有ubuntu会中招的结论是不是有点草率,公众号这么写坑的可不是少部分人,所谓的复现就是单纯下载POC,编译,执行,结束????
来源:oschina
链接:https://my.oschina.net/u/4356296/blog/4946608