Linux被曝出SUDO提权漏洞,幸好影响不大
近期,有安全人员发现了Linux sudo命令中的一个安全漏洞,可让普通用户以root
权限执行命令。但值得庆幸的是,这个漏洞只能在非标准配置的Linux下生效,大多数Linux服务器不受影响。
在我们开始讨论这个漏洞前,有一些关于sudo命令的工作原理以及相关设置是需要去了解的。
当在Linux操作系统上执行命令时,只有得到许可或者知道root
密码,普通用户才可以使用sudo(super user do)命令以root身份执行命令。
因此对于sudo命令来说,通过向/etc/sudoers
配置文件添加特殊的指令,就可以让某个用户以另一个用户的身份运行命令。
例如,下面的命令可让用户test
以任意非root
身份运行/usr/bin/vim
和/usr/bin/id
命令。
test ALL = (ALL, !root) /usr/bin/vim
test ALL = (ALL, !root) /usr/bin/id
对于test
用户,他可以使用一个带-u
参数的sudo命令来指定运行命令的身份。例如,下面的命令将以用户bleep-test
的身份启动vim。
sudo -u bleeping-test vim
在Linux中创建用户时,每个用户都有一个UID。如下所示,用户test
的UID为1001,用户bleep -test
的UID为1002。
而在使用sudo命令时,你也可以直接指定用户的UID来代替用户名。例如,下面的命令将再次以bleep-test
身份启动vim,只不过这一次是通过指定用户的UID。
sudo -u#1002 vim
sudo漏洞
苹果安全研究员Joe Vennix就在sudo上发现了一个漏洞,只要用户在使用sudo命令时指定UID为-1
或4294967295
,就可以以root
身份执行命令。
这是因为命令在将UID转换为对应用户时,会将-1
或4294967295
这两个异常数字视为0
,而0
是root
用户的UID
例如,下面的命令就可以利用这个漏洞以root身份运行/usr/bin/id
,即使/etc/sudoers
文件明确拒绝用户test
这样做。
sudo -u#-1 id
此时通过/usr/bin/id
命令可以清楚看到权限得到了提升。
虽然这个漏洞看似非常强大,但是必须记住,它只能在某个用户通过sudoers
文件的配置访问某个命令的权限时才能生效。如果不是这种设置——大多数Linux发行版默认都不是——那么这个漏洞将不会产生任何影响。
利用漏洞
为了真正利用这个漏洞,用户首先需要为某个能执行其他命令的命令配置好sudoer
文件。
例如,我们可以针对vim命令做如下配置:
test ALL = (ALL, !root) /usr/bin/vim
在vim编辑文件时,用户可以使用:!
符号启动另一个命令。例如,你可以输入!ls
以当前文件夹为目标执行ls
命令。
如果我们利用sudo -u#-1 vim
命令来利用这个漏洞,vim将以root
身份启动。你可以通过执行!whoami
命令来确认这一点。
现在,我们可以确认vim以root身份启动,而它执行的任何命令也是以root
身份运行。
因此,我们可以很轻易地用它来启动一个root
权限的shell,执行任何命令。下面就演示了这种攻击。
综上所述,这个漏洞影响范围非常有限,它只能影响小部分非标准配置的Linux服务器。
对于那些为经常使用sudoers文件的用户,应尽快将软件升级到sudo 1.8.28或更高版本。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://www.bleepingcomputer.com/news/linux/linux-sudo-bug-lets-you-run-commands-as-root-most-are-unaffected/
最新评论