RHSB-2021-006 内核和 systemd 的挂载点中的长路径名中存在安全漏洞(CVE-2021-33909、CVE-2021-33910)
此信息是否有帮助?
摘要
红帽已了解到,因为错误地处理长路径名所造成的两个安全漏洞。第一个漏洞在 Linux 内核中发现。利用这个漏洞,一个本地攻击者可以升级其权限。这个漏洞已被分配为 CVE-2021-33909。第二个漏洞存在于 systemd 中,一个本地攻击者可以利用这个漏洞使 systemd 以及整个系统崩溃。这个漏洞已被分配为 CVE-2021-33910。
这两个漏洞的严重性影响级别为重要(Important)。
以下红帽产品版本直接受到 CVE-2021-33909 的影响:
Red Hat Enterprise Linux 8
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 6
以下红帽产品版本直接受到 CVE-2021-33910 的影响:
Red Hat Enterprise Linux 8
此外,在 Red Hat Enterprise Linux(包括 RHEL CoreOS)上支持的任何红帽产品都有可能会受到影响。这包括:
基于 RHEL 或 UBI 容器镜像的产品容器。基本镜像将被更新以包含针对此漏洞的修复程序,请确保容器是最新的。Container Health Index(Red Hat Container Catalog 的一部分)可以用来检查红帽容器的安全状态。
从 RHEL 频道拉取软件包的产品(包括层次产品,如 OpenShift Container Platform、OpenStack 和 Red Hat Virtualization 等)。请确定这些产品环境中,底层的 RHEL 内核和 systemd 软件包是最新的。
请参照下面的诊断部分的内容,检查您的系统当前是否存在这些安全漏洞。
技术概述
这两个安全漏洞都利用了错误处理带有长路径的文件的问题。
第一个漏洞(CVE-2021-33909)可被用来对 Linux 内核进行攻击。一个没有特权的本地攻击者可以通过创建、挂载和删除总路径长度超过 1GB 的深度目录结构来利用此漏洞。成功的攻击可以导致特权升级。
第二个漏洞(CVE-2021-33910)可以用来对 systemd(系统和服务管理器)进行攻击。为了利用这个漏洞,一个本地的攻击者需要可以使用长路径挂载文件系统。此攻击会导致 systemd、它管理的服务以及整个系统崩溃并停止响应。
缓解方案
红帽已调查了这个问题是否存在可能的缓解方案,目前还没找到实际可行的方案。请尽快更新受影响的软件包。
技术详情
研究人员报告了以下两个漏洞:以下概述了每个漏洞及其影响。
CVE-2021-33909
在 Linux 内核 Filesystem 层的 seq_file 中发现了一个越界写入(out-of-bounds write)的安全漏洞。一个只具有一般用户权限的本地攻击者,可以利用此漏洞访问越界的内存,从而导致系统崩溃或内部内核信息被泄漏。造成这个问题的原因是,在执行操作前没有验证 size_t-to-int 转换。
这个漏洞是 Linux 内核的文件系统层中的一个类型转换漏洞。类型转换漏洞是在进行两种类型之间的转换时存在的一个问题,它可能会导致溢出,从而产生一个很大的负值。
为了利用这个漏洞,攻击者需要可以:
创建一个长路径
在该位置挂载一个文件系统
删除挂载点
可以读取 /proc/<pid>/mountinfo 文件
此问题会被触发,结果是可以使用可控制偏移来写入内核内存。
mountinfo 文件是一个 seq_file 的示例,它是一个虚拟文件,内核通过该文件来代表一系列记录。每个记录必须位于 seq_file 缓冲区中,该缓冲区的大小使用 size_t(一个 64 位的 unsigned 值)来跟踪。当 show_mountinfo 函数中使用很长的挂载点路径时,就会出现问题。
这个过程需要一个 int 值作为缓冲区长度(一个 32 位的 signed 值),如下所示:
show_mountinfo() -> seq_dentry() -> dentry_path((.. , .. , int buflen)
请注意,"buflen" 可能会导致 size_t-to-int 转换问题,它会将数值转换成一个负值,并可以在随后造成越界访问的安全问题。
当挂载点仍在使用但路径已被删除时,会使用错误计算的值作为偏移,在分配的缓冲区外写入字符串 "///deleted"。由于该值为负数,因此它会写入到预期缓冲区位置之前的 10 个字节和 2GB 之间的位置。
针对于特定的内存位置,使用这个偏移位置写入可以导致拒绝服务(DoS)、系统崩溃、内存数据损坏或特权升级问题。
CVE-2021-33910
systemd 中发现了一个漏洞。当在 unit_name_path_escape 中使用一个没有大小控制的 alloca 功能时,本地攻击者可以通过在堆栈中分配一个非常大的空间,在一个非常长的路径上挂载文件系统,从而使 systemd 和整个系统崩溃。
这是一个在 systemd 中受攻击者控制的 alloca(),攻击者可以利用它使 systemd 服务 (PID 1) 和整个系统崩溃。alloca() 用于分配堆栈上程序所需的空间。当请求的大小由用户控制,或者太大时,不应使用它。否则程序可能会在分配的堆栈空间外进行写入操作并使系统崩溃。
systemd 持续监控 /proc/self/mountinfo 文件,以获取有关挂载的文件系统的详细信息,并使用 alloca() 在内部复制挂载点字符串。如果攻击者可以在非常长的路径上挂载文件系统(例如,使用 FUSE),则攻击者可能会触发此问题并导致系统崩溃。
此问题不会影响 Red Hat Enterprise Linux 7 附带的 systemd 版本。因为它们不使用 strdupa()(使用 alloca() 来复制 unit_name_path_escape() 功能中的字符串)而是使用 strdup()(在堆上分配空间)。
受 CVE 影响的红帽产品
CVE-2021-33909 (kernel) Important(重要) | CVE-2021-33910 (systemd) Important(重要) | |
Red Hat Enterprise Linux 8 | 受影响 - 所有被维护的版本都会提供相关修复。 | 受影响 - 所有被维护的版本都会提供相关修复。 |
Red Hat Enterprise Linux 7 | 受影响 - 所有被维护的版本都会提供相关修复。 | 不受影响 |
Red Hat Enterprise Linux 6 | 受影响 - 所有被维护的版本都会提供相关修复。 | 不受影响 |
受影响产品的更新
我们强烈建议,所有运行受影响版本的红帽产品的用户,在相关勘误可用后尽快进行更新。用户应立即应用可用的更新并根据需要启用缓解措施。
产品 | 组件 | 公告/更新 [1] |
Red Hat Enterprise Linux 8 | kernel | |
kernel-rt | ||
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 8.2.0 延长更新支持 [2] | kernel | |
kernel-rt | ||
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 8.1.0 延长更新支持 [2] | kernel | |
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 7 | kernel | |
kernel-rt | ||
kpatch | ||
Red Hat Enterprise Linux 7.7 延长更新支持(EUS)[2] | kernel | |
kpatch | ||
Red Hat Enterprise Linux 7.6 延长更新支持(EUS)[2] | kernel | |
kpatch | ||
Red Hat Enterprise Linux 7.4 Update Services for SAP Solutions, Advanced Update Support [3],[4] | kernel | |
Red Hat Enterprise Linux 7.3 Advanced Update Support [4] | kernel | |
Red Hat Enterprise Linux 7.2 Advanced Update Support [4] | kernel | |
Red Hat Enterprise Linux 6 Extended Life-cycle Support [5] | kernel | |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 8 | redhat-virtualization-host | RHSA-2021:2736 |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 7 | redhat-virtualization-host |
[1] 公告/更新链接将在更新发布后添加。
[2] 什么是 Red Hat Enterprise Linux Extended Update Support (EUS) 订阅?
[3] 什么是 Advanced mission critical Update Support (AUS)?
[4] 什么是 Red Hat Enterprise Linux SAP Solutions 订阅?
[5] 访问此修补程序需要一个有效的延长生命周期支持(ELS)订阅。如果您的帐户并没有包括有效的 ELS 订阅,请联系红帽销售部门或您的销售代表以获取更多信息。
诊断
一个安全漏洞检测脚本已被开发,用来检查您的系统当前是否存在相关的安全漏洞。您可以下载 GPG 签名来验证脚本的真实性。红帽客户门户网站上提供了有关如何使用GPG签名进行验证的说明。
致谢
红帽感谢 Qualys Research 团队报告了这些漏洞。
参考信息
https://access.redhat.com/security/cve/cve-2021-33909
https://access.redhat.com/security/cve/cve-2021-33910
https://www.qualys.com/2021/07/20/cve-2021-33909/sequoia-local-privilege-escalation-linux.txt
https://www.qualys.com/2021/07/20/cve-2021-33910/denial-of-service-systemd.txt
Comments