dirtyc0w aka "Dirty COW" bug 的可能影响是什么?

信息安全 linux 开发 已知漏洞 核心 脏牛
2021-08-11 08:06:37

我听说过Dirty COW,但找不到关于该错误范围的任何体面的文章。看起来这个漏洞可以覆盖任何不可写的文件,这让我猜想本地根可以通过替换 SUID 程序来实现。是对的吗?关于 Dirty COW,我们还知道些什么?是否可以远程利用它?对安卓有影响吗?

4个回答

如果没有另一个漏洞,就无法远程利用它。您需要能够在系统上执行命令。

一个典型的例子是 web shell。假设服务器正在运行一个 Web 应用程序,该应用程序存在漏洞,允许您上传 Web shell 或以其他方式执行系统命令。这些命令通常会以低权限用户的身份执行,有时称为www-data或类似用户。

使用此漏洞,您可以覆盖文件/etc/passwd以提供www-dataUID 0。现在www-data具有 root 权限。

但是,我尝试了一些东西并且修改/etc/passwd在我的系统上不起作用。您可以将用户的 UID 设置为 0,但是您必须重新登录,如果您只有一个 web shell,这不是一个真正的选择。到目前为止,我见过的最好的武器化漏洞利用覆盖/usr/bin/passwd了用于更改用户密码并设置了 SUID 位的二进制文件,并带有执行的 shellcode /bin/bash该漏洞利用的一些限制似乎是:您只能覆盖现有字节,不能向文件添加任何内容。我也无法将超过 4KB 的内容写入文件。

至于影响 Android,我在Android 4.4 git repo中搜索了有问题的函数 ( follow_page_pte) 并没有得到任何结果,所以我想说“不”,但不要引用我的话。

编辑:Android 受到影响 - 请参阅此概念证明

脏牛漏洞,是Linux内核2.6.22及更高版本的提权漏洞;它自 2007 年以来一直存在,并于 2016 年 10 月 18 日修复。

dirtyc0w bug 的可能影响是什么?

非特权本地用户可以利用此漏洞获得对其他只读内存映射的写访问权限,从而提高他们在系统上的特权。

此漏洞允许具有本地系统帐户的攻击者修改磁盘上的二进制文件,绕过标准权限机制,该机制将在没有适当权限集的情况下阻止修改。

是否可以远程利用它?

它不能直接远程利用;你首先需要另一个缺陷来让你远程访问系统,正如@IMSoP在他的评论中提到的那样,

它被评为重要错误:

重要影响

该评级是针对容易危及资源的机密性、完整性或可用性的缺陷。这些漏洞类型允许本地用户获得特权,允许未经身份验证的远程用户查看本应通过身份验证保护的资源,允许经过身份验证的远程用户执行任意代码,或允许远程用户导致拒绝服务。

对安卓有影响吗?

是的,因为 Android 使用的是 Linux 内核。

我受到影响吗?

如果您有任何运行高于 2.6.22 的 Linux 内核的设备,那么您很可能容易受到攻击。所有版本的 Android 都是如此,无论它们来自三星、谷歌、Cyanogen、MIUI 还是其他供应商,因为它们尚未发布安全更新。

为了利用此漏洞,攻击者需要在受影响的设备中运行代码,在 Android 的情况下,这可以通过 USB 上的 Android 调试桥 (ADB) 或通过安装利用该漏洞的应用程序来完成。

更新

安全搜索者在博客上描述了如何远程利用该漏洞

这些漏洞可用于针对提供外壳访问的 Web 托管服务提供商,以便一个客户可以攻击其他客户甚至服务管理员。特权升级漏洞也可以与针对其他漏洞的攻击相结合。例如,网站中的 SQL 注入漏洞通常允许攻击者仅以不受信任的用户身份运行恶意代码。然而,结合升级漏洞利用,此类攻击通常可以实现令人垂涎的根状态。

有用的信息可以在这里找到:

  1. 如何确定您的系统是否易受攻击?
  2. 受影响的 Linux 发行版列表是什么?
  3. 我如何解决它?

CVE-2016-5195 是一种所谓的权限提升漏洞。它允许您将特权级别从普通 Linux 用户提升到 root。但是特权提升漏洞通常是本地漏洞(这意味着它们在本地运行在一个盒子上),这意味着您已经需要登录到操作系统。

我正在检查的公共漏洞允许写入由 root 拥有的文件,这些文件对非 root 用户来说是只读的或根本无法访问。这允许您覆盖管理文件。您可以利用它成为 root。例如,您可以添加一行

hack::0:0:,,,:/home/kai:/bin/bash

/etc/passwd. 这将在框中添加一个没有密码的 root 用户。

至少它确实会影响 Android 5.0.1(内核版本 3.10.54+)。我刚刚在使用Termux的设备上试用了这段代码,并且编辑 root 拥有的文件完美无缺。我喜欢这样,因为该设备没有可用的根。

另一方面,这让我感到惊讶,因为 Android使用 SELinux,我认为 SELinux 会阻止写入/proc/self/mem.

实际上,我只是尝试写入一个名为 的用户拥有的文件,该用户sdcard拥有 SD 卡上的所有文件。Termux 本身(通常)不允许写入 SD 卡。当我在这样的文件上尝试dirtyc0w 时,设备只是挂起并在几秒钟后自动重新启动。在此挂起期间甚至adb logcat不输出任何内容。不知道那里发生了什么。