sudo 可至获取root权限漏洞 CVE-2019-14287剖析

9月14号,sudo 官网在发布了 CVE-2019-14287 的漏洞预警。

sudo 是所有 unix操作系统(BSD, MacOS, GNU/Linux) 集成的一个用户权限控制/切换程序。允许管理员自由切换进出root权限。

CVE-2019-14287这个漏洞呢,并不适用于默认情况,需要管理员在 /etc/sudoers 配置了All关键词才有触发的可能。所以,鸡肋。但是,也很有趣。

sudo 可至获取root权限漏洞 CVE-2019-14287剖析_第1张图片
sudo


举个栗子,如果管理员在/etc/sudoers 添加这两行


testALL= (ALL, !root) /usr/bin/vim

testALL= (ALL, !root) /usr/bin/id


这表示,允许test这个用户以任意用户(root除外)权限执行vim和id 这两个程序。

test要以其它用户执行上面两个程序的话,是这么弄的:

sudo -u otheruser vim

当在Linux创建用户时,每个用户都会分配一个UID,这可以到/etc/passwd看到,例如:

...

test:x:1001:1001::/home/test:/bin/bash

otheruser:x:1002:1002::/home/otheruser:/bin/bash

...

所以上面的

sudo -u otheruser vim

也可以改为:

sudo -u#1002 vim

因为otheruser的uid就是1002


#那么,sudo的漏洞是啥。。

就是用-1 或者 4294967295 这个UID 。  后面这个数字有意思,它是2的32次方减一。而-1看起来又是32位二进制数值溢出后被截断的值。

由于/etc/sudoers 中的test ALL = (ALL, !root) /usr/bin/id已经明确不能以root执行,因为root的uid是0,所以下面这样做是会失败的:

sudo -u#1 id

或者

sudo -u root id


但是,问题就来了,-1 或者 4294967295这个UID确是可以的。

这个命令可以以root权限执行。

sudo -u#-1 id

返回的是:

uid=0(root) gid=1001(test) groups=1001(test)


sudo 可至获取root权限漏洞 CVE-2019-14287剖析_第2张图片
图来自bleepingcomputer

所以,这个漏洞很直白。



#那,这就完了么

还木有。还有个有趣的地方,因为像上面那样子,要越狱成root的shell,好像无从下手。

一个可以考虑替换/usr/bin/vim或者/usr/bin/id两个文件为shell程序,但是,问题又来了,修改这两个地方需要用到root权限,这是一个死循环。

/usr/bin/id 这里是没啥好利用的,重任就落在vim这个程序了。它很强大,强大到好多老前辈能用它写并且维护几十万行代码的项目,强大到可以启动shell...

对,就是它了,能启动shell。。启动shell的方式很简单,在vim里按esc键,然后输入":!/bin/bash" 。这跟Windows 的ftp执行 cmd 命令基本一毛一样,就少个冒号而已。

图来自bleepingcomputer

顺便说一下,vi命令也是跟vim有同样的表现

参考:https://www.sudo.ws/alerts/minus_1_uid.html

HackerHub发布 | 转载请注明出处


防火墙上植入微型间谍芯片,隐蔽、高效、便宜

sudo 可至获取root权限漏洞 CVE-2019-14287剖析_第3张图片


sudo 可至获取root权限漏洞 CVE-2019-14287剖析_第4张图片
HackerHub

你可能感兴趣的:(sudo 可至获取root权限漏洞 CVE-2019-14287剖析)