Linux sudo权限绕过漏洞详解

Linux sudo权限绕过漏洞详解

难得提起兴致写一篇软文,对于新曝光的Linux sudo权限绕过漏洞CVE-2019-14287做了一些研究,
各大平台都已经把核心东西亮出来了,但是目前没有发现说的特别完整的,经过一番摸索,总算
弄清楚了。

关于sudo的定义就不细说了,网上随便搜搜一大堆,这里直接进入正题。
本漏洞存在于sudo 1.8.28之前的版本,随便打开个虚拟机看看当前版本:
Linux sudo权限绕过漏洞详解
版本没有问题,直接开撸。

先附上发现者苹果信息安全部门Joe Vennix的原文:
Linux sudo权限绕过漏洞详解
从这里我们知道,要复现这个漏洞是有前提的,上文中作者赋予bob用户通过sudo命令执行vi命令的权利,但是只拥有除了root权限以外的权限,很明显,这样以来,是不能修改和访问root用户和用户组的文件的。
而如果不添加这个权限,bob是不能执行sudo命令的,举个例子:
Linux sudo权限绕过漏洞详解
文件中并没有赋予其他用户使用sudo命令的权利,我们切换到common用户,执行sudo命令:
Linux sudo权限绕过漏洞详解
很明显,common用户不能使用sudo,我们将common用户添加到sudoers中,也赋予非root权限执行vi命令:
首先赋予sudoers root用户写的权利,原本sudoers是没有写的权利的:
Linux sudo权限绕过漏洞详解
然后将非root使用vi命令的权利赋给common:
Linux sudo权限绕过漏洞详解
我们现在来试试common的sudo vi:
Linux sudo权限绕过漏洞详解
OK,我们可以使用sudo vi修改文件了,但是现在没有root权限,所以无法修改root组的/etc/passwd文件。
我们知道,root用户的id是0,如果我们能将common用户的id也变成0就可以执行root的权限了,这也就是漏洞的原理所在,当前sudo版本会将id为-1和4294967295的用户作为id为0来进行识别,所以我们只需要将uid指定为0或4294967295均可绕过上面的权限控制执行root权限:
Linux sudo权限绕过漏洞详解
OK,这样我们就可以让common用户以root权限执行vi命令了。