Backhouse 指出,利用该漏洞攻击系统的方法非常简单,只需要一些简单的命令就能为自己创建一个管理员账户。“现代操作系统中的漏洞如此容易被利用是不寻常的。“Backhouse 还录制了视频详细展示了自己如何利用这个漏洞对系统进行攻击。
据悉,该漏洞利用了 Ubuntu 系统中的两个错误。一个是管理计算机上用户账户的服务 accountsservice,另一个是 GNOME 显示管理器(gdm3) 的 BUG。
accountsservice 漏洞
accountservice 的守护进程 accounts-daemon 是管理机器上用户账户的系统服务,它可以创建一个新的用户账户或更改用户的密码,但它也可以做一些安全敏感度较低的事情,比如更改用户的图标或他们喜欢的语言。守护进程是在后台运行的程序,没有自己的用户界面。然而,系统设置对话框可以通过一个称为 D-Bus 的消息系统与账户-守护进程进行通信。
而 Ubuntu 使用了一个修改过的 accountsservice 版本,其中包含了一些额外的代码,而这些代码在 freedesktop 维护的上游版本中并不存在。Ubuntu 的补丁增加了一个名为 is_in_pam_environment 的函数,它在用户的主目录中寻找一个名为 .pam_environment 的文件,并读取它。
accounts-daemon 漏洞的工作原理是将 .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 用户界面的一个基本组件。它负责处理诸如在用户登录和退出时启动和停止用户会话等事宜,还负责管理登录屏幕。
gdm3 处理的另一件事是新电脑的初始设置。当你在新电脑上安装 Ubuntu 时,首先需要做的事情之一就是创建一个用户账户。初始用户账户需要设置一个管理员,这样用户才能继续设置机器,做一些诸如配置 wifi 和安装应用程序的事情。下面是初始设置界面的截图(取自漏洞视频)。
截图中看到的对话框是一个单独的应用程序,叫做 gnome-initial-setup。当系统上的用户账户为 0 时,它就会被gdm3 触发,这也是新电脑初始设置时的情况。而 gdm3 恰好就是通过询问 accounts-daemon 来检查当前机器的账户数量。因为在上一个漏洞中导致 accounts-daemon 已经崩溃,其用于查询账户数量的 D-Bus 方法调用由于超时而失败。所以现在 gdm3 认为用户账户为零,并启动了 gnome-initial-setup。
Backbouse 已经在上个月将该漏洞报告提交给了 Ubuntu 和 GNOME 维护人员,目前官方已经进行了修复。使用 Ubuntu + GNOME 的用户还请尽快安装修复补丁。(没有使用 GNOME 的用户暂时不受影响)
本文转自OSCHINA。
本文JetBrains 发布 Kotlin 桌面 UI 框架,共享 Android UI 代码
本文地址:https://www.oschina.net/news/120434/jetbrains-jetpack-compose-for-desktop