无需系统密码,即可添加新的sudo用户,获得root权限,事后无需删除留下任何痕迹。这是GitHub安全研究员KevinBackhouse发现的一个重大Ubuntu系统漏洞。这种攻击方法非常简单,Backhouse在官方博客上写道:“在终端中使用一些简单的命令和点击几下鼠标,一个标准用户就可以为自己创建一个管理员帐户。”所有操作系统都受到影响,包括20.10和20.04、18.04和16.04的三个LTS版本。后屋如何运作?我们往下看。攻击方式首先打开终端,在你的home目录下创建一个软链接:ln-s/dev/zero.pam_environment复制此文件将其命名备份!)接下来,在系统设置中打开“区域和语言”并尝试更改语言。对话框将冻结,忽略它并返回终端。此时,一个名为accounts-daemon的程序正在消耗100%的CPU内核,因此您的计算机可能会变慢并开始变热。在终端中,删除软链接。否则,您可能无法使用您的帐户!rm.pam_environment的下一步是向accounts-daemon发送一个SIGSTOP信号,防止它破坏CPU内核。但是要做到这一点,您首先需要知道帐户守护进程的PID。您可以通过运行top找到PID。由于accounts-daemon陷入了无限循环,它很快就进入了top列表的顶部。或者使用pidof命令查找PID:$pidofaccounts-daemon597然后使用kill命令杀掉SIGSTOP信号:kill-SIGSTOP597然后注销账号,但是首先需要设置一个定时器来保证accounts-daemon是注销后重置。否则,之前的努力就白费了。nohupbash-c"sleep30s;kill-SIGSEGV597;kill-SIGSEGV597"注销后等待几秒钟,让SIGSEGV生效。如果利用成功,将显示一系列对话框,要求您创建一个新的用户帐户。这个新帐户具有管理员权限,可以运行sudo命令。攻击原理该漏洞利用了Ubuntu系统中的两个漏洞:第一个是accountservice,这是一种在计算机上管理用户账户的服务。第二个是GNOME显示管理器(gdm3),它处理登录屏幕。accounts-daemon漏洞accountsservice守护进程(accounts-daemon)是一种系统服务,可以执行创建新用户帐户或更改用户密码等操作,但也可以执行更改用户图标或首选语言等安全敏感度较低的操作.Ubuntu使用修改版的accountservice服务,添加了一个名为is_in_pam_environment的函数,该函数在用户的主目录中查找名为.pam_environment的文件并读取它。将.pam_environment链接到/dev/zero允许拒绝帐户服务。因为/dev/zero实际上是一个磁盘上不存在的特殊文件。它由操作系统提供,表现得像一个无限长的文件,每个字节都是0。当is_in_pam_environment试图读取.pam_environment时,它通过软链接重定向到/dev/zero,然后陷入无限循环,因为/dev/zero无限长。这样做会导致accounts-daemon失去其root权限并承担用户的较低权限。然后将SIGSEGV发送到帐户守护程序以使其崩溃。GNOME漏洞GNOME显示管理器(gdm3)是Ubuntu用户界面的重要组成部分。它处理诸如在用户登录和注销时启动和停止用户会话之类的事情,还管理登录屏幕。当用户对新系统进行初始设置时,会启动一个对话框,它实际上是一个名为gnome-initial-setup的单独应用程序。当gdm3发现用户数为0时,就会启动这个程序。那么gdm3是如何检查系统中有多少用户的呢?通过询问账户守护进程!不幸的是,accounts-daemon已经被我们之前的操作彻底崩溃了,所以gdm3认为检查超时后accounts-daemon为0,启动gnome-initial-setup。初始化设置的用户必须具有管理员权限。官方紧急修复Backhouse在10月17日向Ubuntu和GNOME维护者报告了这些错误,官方修复在最新代码中可用。建议所有Ubuntu用户尽快安装更新。不过,该漏洞仅对桌面版Ubuntu有效。如果你使用的是命令行界面,或者是GNOME以外的桌面环境,暂时不会受到影响。
