快检查一下你的sudo:无需密码就能获取root权限,还是个10年老bug
公众号关注“杰哥的IT之旅”,
选择“星标”,重磅干货,第一时间送达!
贾浩楠 鱼羊 发自 凹非寺
量子位 报道 | 公众号 QbitAI
“这可能是近期内最需要重视的sudo漏洞。”
程序员都知道,一句sudo可以“为所欲为”。
而现在,来自Qualys的安全研究人员发现,sudo中存在一个严重的漏洞:
任何本地用户,无需身份验证(密码),也能获得root权限。
也就是说,攻击者完全可以利用这个漏洞,直接接管主机系统!
什么样的漏洞
Qualys的研究人员指出,此漏洞是基于堆的缓冲区溢出。
利用这一漏洞,攻击者无需知道用户密码,一样可以获得root权限。并且,是在默认配置下。
△攻击效果
这一漏洞名为CVE-2021-3156(又名Baron Samedit)。Qualys分析认为,漏洞发生的原因在于sudo错误地转义了参数中的反斜杠。
通常,通过shell(sudo -s或sudo -i)运行命令行时,sudo会转义特殊字符。
但 -s 或 -i 也可能被用来运行sudoedit,在这种情况下,实际上特殊字符没有被转义,这就可能导致缓冲区溢出。
利用该漏洞,研究人员在多个Linux发行版上成功获得了完整的root权限,包括Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2)。
并且,Qualys认为,在这种情况下,sudo支持的其他操作系统和Linux发行版也很容易受到攻击,并不能排除风险。
漏洞10年前就存在
能让攻击者跳过身份验证,直接获取root权限,这个漏洞本身的严重程度,按理说应该引起大部分用户和开发者注意。
事实上,这个漏洞2011年7月开始就已经存在,是由8255ed69这个commit引入的。
匪夷所思的是,从2011年7月29日提交到现在,一直没有人发现、修复由此引发的漏洞。
也就是说,这个漏洞一直存在于sudo1.9.0到1.9.5p1的所有稳定版本,和1.8.2到1.8.31p2的所有旧版本的默认配置中。
按照惯例,在Qualys公布这一漏洞的详细消息之前,sudo已经正式修复这个漏洞。
所以,升级到sudo的1.9.5p2或是更高版本,就能化解风险。
如何测试你现在使用的sudo版本是否存在漏洞呢?
首先你需要以非root用户的身份登录,并运行“sudoedit -s /”命令。
有漏洞的系统会抛出一个以 “sudoedit: ”开头的错误,而打过补丁的系统则会显示一个以 “usage:”开头的错误。
为啥10年未修复?
为什么提交近10年间,这个漏洞都没人理会呢?
在Hacker News上,有网友给出了推断:
他认为,包括但不限于sudo这样的Linux程序的用户提交声明,是从来没有经过测试的。
提交没有测试的bug声明,原作者是没有充足的理由相信bug的真实性,也就无所谓bug是否修复了。
比如去年,有苹果的安全人员也发现了一个类似的安全漏洞,Linux Mint上的sudo在非默认配置下,也允许用户跳过身份验证获得root权限。
而类似这样的漏洞补丁,大部分也没有经过测试,所以,对用户来说,即使安装漏洞修复,也还存在漏洞修补不完全,以及引起新漏洞的风险。
还有人说,sudo官方没有“审稿人”的职能,对于用户的提交,没有确定的安全标准,所以也不会有的测试和审核。
普通用户怎么办呢?
很遗憾,现在根本没有一套完美的解决办法。
面对可能存在的漏洞,你能做的,就是格外留意自己的系统安全,避免不信任的用户碰到你的电脑。
参考链接:
https://www.theregister.com/2021/01/26/qualys_sudo_bug/
https://news.ycombinator.com/item?id=25919235
https://bit.ly/36hvlal