作为 Linux 中最常使用的重要实用程序之一,Sudo几乎安装在每一款 UNIX 和Linux 发行版上,以便用户调用和实施核心命令。然而近期研究人员发现了一个提权漏洞,却直指Sudo的一个安全策略隐患——即便配置中明确不允许root用户访问,该漏洞仍可允许恶意用户或程序,在目标Linux系统上以root用户身份执行任意命令。
但值得庆幸的是,这个漏洞只能在非标准配置的Linux下生效,大多数Linux服务器不受影响。
首先,让我们先来了解一下Sudo。
Sudo(super user do)是用于类似Unix的计算机操作系统的程序,该程序允许用户使用其他用户的安全特权运行程序,默认情况下是超级用户。
当在Linux操作系统上执行命令时,只有得到许可或者知道root密码,普通用户才可以使用Sudo命令以root身份执行命令。
因此对于Sudo命令来说,通过向/etc/sudoers配置文件添加特殊的指令,就可以让某个用户以另一个用户的身份运行命令。
在Linux中创建用户时,每个用户都有一个UID。如下所示,用户test的UID为1001,用户bleep-test的UID为1002。
而在使用sudo命令时,你也可以直接指定用户的UID来代替用户名。例如,下面的命令将再次以bleep-test身份启动vim,只不过这一次是通过指定用户的UID。
苹果安全研究员Joe Vennix就在sudo上发现了一个漏洞,只要用户在使用sudo命令时指定UID为-1或4294967295,就可以以root身份执行命令。
这是因为命令在将UID转换为对应用户时,会将-1或4294967295这两个异常数字视为0,而0是root用户的UID。
Sudo开发者表示:“即便 RunAs规约明确禁止root用户访问,但如果 Runas规约文件中首先列出了ALL关键字,具有sudo权限的用户就可以使用它来以root身份运行任意命令。”
虽然该漏洞影响了最新版本 1.8.28 之前的所有 Sudo 版本,但是必须记住,它只能在某个用户通过sudoers文件的配置访问某个命令的权限时才能生效。如果不是这种设置——大多数Linux发行版默认都不是——那么这个漏洞将不会产生任何影响。