sudoedit 堆溢出本地提权漏洞(CVE-2021-3156)

拈花ヽ惹草 提交于 2021-02-05 15:27:19

sudoedit 堆溢出本地提权漏洞(CVE-2021-3156)

最早出处

漏洞最早由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’s MODE_SHELL flag;
  • OR through the -i option, which sets Sudo’s MODE_SHELL and MODE_LOGIN_SHELL flags;

要么-s 要么-i,设置flagMODE_SHELL

sudoedit -s 命令含义:
执行环境变量中所指定的 shell ,或是 /etc/passwd 里所指定的shell

正常MODE_SHELLflag情况下,会转义字符,但是文章中表示如果以非sudo的身份执行sudoeditflag会|=MODE_EDIT,并且MODE_EDIT不会重置,此时就会拥有MODE_EDIT|MODE_SHELLflag绕过了转义

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,编译,执行,结束????

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!