研究人员在Linux SUDO命令中发现了一个bug,非授权的用户可以利用该bug以root权限运行命令。幸好该漏洞不是以标准配置下运行,因此大多数Linux服务器不受影响。
在Linux操作系统下执行命令时,非特权的用户可以用sudo命令来以root权限来运行命令,前提是要知道root用户密码或提前被授予权限。
可以通过在/etc/sudoers配置文件中加入特殊命令来配置Sudo命令为允许用户以其他用户运行命令。比如,下面的命令就可以让用户test以其他非root用户来运行/usr/bin/vim和 /usr/bin/id命令。
test ALL = (ALL, !root) /usr/bin/vim test ALL = (ALL, !root) /usr/bin/id
Test用户要运行上面的命令,就可以用sudo -u来指定要运行的用户。比如:
sudo -u bleeping-test vim
在Linux中创建用户时,每个用户都会有一个UID。如下图所示,test用户的UID为1001,用户bleeping-test的 UID 为1002。
用户UID
用户在使用sudo命令时还可以用UID来替代用户名。比如,下面的命令就用bleeping-test用户的UID来替代用户名了:
sudo -u#1002 vim
漏洞分析
苹果安全研究人员 Joe Vennix 发现sudo命令中存在一个安全漏洞,用户利用该漏洞可以通过在sudo命令中将UID 设为-1或4294967295来以root权限运行sudo命令。
比如,下面的命令就利用该漏洞来以root权限启动 /usr/bin/id ,但是test用户的 /etc/sudoers文件中是没有这样的权限的。
sudo -u#-1 id
使用该bug来运行/usr/bin/id命令来获取root权限如下所示:
利用sudo bug以root权限运行/usr/bin/id
虽然该bug很强大,但是只有通过sudoers配置文件授予用户这样的权限该漏洞才可能运行。如果没有配置的话,该漏洞是无法利用的,而大多数Linux发行版中默认是不配置的。
攻击
为了利用该漏洞,用户需要为命令配置sudoer指令来启动其他命令。
在下面的例子中,研究人员使用的是VIM命令:
test ALL = (ALL, !root) /usr/bin/vim
在VIM中,用户可以用:!命令启动其他程序。比如,在VIM中,可以用!ls 来在当前文件夹中执行ls命令。
如果使用 sudo -u#-1 vim命令来利用该漏洞,VIM就会以root启动。用户可以执行 !whoami 命令来进行确认。
VIM以root运行
可以看到VIM 以root权限启动了,其中执行的所有命令都是root权限运行的。
在被黑的机器上就可以用这样的方法来启动root shell,然后执行任意命令。
攻击的POC视频如下:
启动root shell
Sudo v1.8.28之前版本受到该漏洞的影响。最新发布的sudo 1.8.28版本修复了该漏洞,研究人员建议用户尽快升级到1.8.28版本。
更多技术细节参见:https://www.sudo.ws/alerts/minus_1_uid.html
本文翻译自:https://www.bleepingcomputer.com/news/linux/linux-sudo-bug-lets-you-run-commands-as-root-most-are-unaffected/如若转载,请注明原文地址: https://www.4hou.com/vulnerable/20881.html