RHSB-2022-001 Polkit 特权升级 -(CVE-2021-4034)
已更新
执行摘要
红帽已了解到在 pkexec 中发现的漏洞,其允许经过身份验证的用户执行特权升级攻击。
polkit 软件包旨在定义和处理允许 Linux 系统上的非特权进程与特权进程进行通信的策略。pkexec 是 polkit 的一部分,是一个允许用户利用 setuid 功能,根据 polkit 策略定义,以另一个用户的身份执行命令的工具。pkexec 中发现的问题允许无特权的 本地攻击者 升级特权,并由于对进程参数向量的错误处理而绕过任何身份验证和策略。
客户面临的主要风险是,非特权用户有可能获得受影响系统的管理特权。攻击者必须具有对目标系统的登录权限才能实施攻击。
这个问题被指定为 CVE-2021-4034,其严重程度等级被定为 重要 。
以下红帽产品版本会受到影响。"受影响" 意味着漏洞存在于产品的代码中,无论用法或缓解措施如何,如果产品存在漏洞,就可能会解决这些问题。
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 8
Red Hat Virtualization 4
此外,在 Red Hat Enterprise Linux(包括 RHEL CoreOS)上支持的任何红帽产品都有可能会受到影响。这包括:
基于 RHEL 并提供了 polkit 软件包的产品容器。这些镜像会定期更新,指示这个安全漏洞是否修复的容器健康状况可在 Container Health Index (Red Hat Container Catalog 的一部分)中看到 。
从 RHEL 渠道拉取软件包的产品(包括分层产品,如 OpenShift Container Platform、Red Hat OpenStack Platform、Red Hat Virtualization 等)。请确保这些产品环境中底层的 RHEL polkit 软件包是最新的。
要确定您的系统当前是否存在这些安全漏洞,请参照下面的 诊断 部分。另外,下面还提供了一个用于自动修复的 Ansible playbook。
技术概述
pkexec 程序无法正确验证传递给它的参数数量。此问题最终会导致试图将环境变量作为命令来执行。如果被正确利用,这个问题会导致 pkexec 以特权用户的身份执行任意代码,给攻击者授予本地权限升级。如需更多详细信息,请参阅 CVE-2021-4034。
缓解措施
红帽产品安全部门强烈建议受影响的客户在得到 polkit 软件包后立即更新它。对于无法立即更新的客户,可以执行以下步骤来缓解这个问题:
1.安装以下所需的 systemtap 软件包和依赖项:https://access.redhat.com/solutions/5441。
2.安装 polkit debug info:
debuginfo-install polkit
3.创建以下 systemtap 脚本,并将其命名为 pkexec-block.stp:
probe process("/usr/bin/pkexec").function("main")
{
if (cmdline_arg(1) == "")
raise(9);
}
4.将 systemtap 模块加载到运行的内核中:
stap -g -F -m stap_pkexec_block pkexec-block.stp
5.确保模块已载入:
lsmod | grep -i stap_pkexec_block
stap_pkexec_block 434176 0
6.将 polkit 软件包更新至包含修复的版本后,运行以下命令删除 systemtap 生成的内核模块:
rmmod stap_pkexec_block
使用 rmmod 命令后,不需要重启系统。
注意:如果系统重启了,则需要将 systemtap 生成的模块重新加载到内核中。为此,请导航到创建缓解脚本的目录,并遵循第 4 和第 5 步。
执行了上述缓解措施后,对于合法用例,pkexec 将继续按预期工作。
注:这个缓解方案不适用于启用了安全引导的系统。 SystemTap 需要外部编译服务器,才能使用注册到内核密钥环中的密钥对生成的内核模块进行签名。
技术细节
在启动新进程时,Linux 内核会创建一个包含所有命令参数(argv)的数组、一个包含环境变量(envp)的数组,以及一个代表参数个数(argc)的整数值。Linux 内核以连续的方式将参数数组和环境变量数组放在内存中。另一个默认行为是参数数组的第一个值如何包含可执行文件名称(例如,pkexec 的可执行文件 pkexec ),这意味着用户发送给进程的任何参数都位于该值之后。
pkexec 不验证参数个数,它会始终假设该参数至少为 1,第二个值要么是 NULL,要么是 pkexec 以特权用户身份要执行的命令。如果攻击者成功迫使参数数组为空,则 pkexec 会将环境数组中的内容解释为要执行的应用程序。攻击者可以通过操作这些变量使其包含特定的值和有效负载来利用这一点,允许其以特权用户的身份执行,而无需请求任何身份验证。
服务影响
以下红帽服务会受到直接影响:
OpenShift Dedicated(OSD)
Azure RedHat OpenShift(ARO)
由于要使用 polkit,所以对服务的影响为低,用户应使用图形或 CLI 进行身份验证,以获得使用 polkit 作为身份验证代理的服务。在 OSD 中,图形用法不相关;在 CLI 用法中,用户将使用 OC 命令向 OSD 集群进行身份验证。
另外,OSD 没有在生产环境中特殊使用 polkit。在 OSD 中,在一个测试 OSD 集群的主节点上,timedatex 依赖于 polkit。因此,对于 OSD/ARO,影响较低。
对受影响产品的更新
我们强烈建议,所有运行受影响版本的红帽产品的用户,在相关勘误可用后尽快进行更新。
用户应立即应用可用的更新并根据需要启用缓解措施。
产品 | 组件 | 公告/更新 [1] |
Red Hat Enterprise Linux 8 | polkit | |
Red Hat Enterprise Linux 8.4.0 延长更新支持(EUS) [2] | polkit | |
Red Hat Enterprise Linux 8.2.0 延长更新支持(EUS)[2] | polkit | |
Red Hat Enterprise Linux 8.1.0 Update Services for SAP Solutions, Advanced Update Support [3],[4] | polkit | |
Red Hat Enterprise Linux 7 | polkit | |
Red Hat Enterprise Linux 7.7 Update Services for SAP Solutions, Advanced Update Support [3],[4] | polkit | |
Red Hat Enterprise Linux 7.6 Update Services for SAP Solutions, Advanced Update Support [3],[4] | polkit | |
Red Hat Enterprise Linux 7.4 Advanced Update Support [4] | polkit | |
Red Hat Enterprise Linux 7.3 高级更新支持 [4] | polkit | |
Red Hat Enterprise Linux 6 延长生命周期支持 [5] | polkit | |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 8 | polkit | RHSA-yyyy:xxxx |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 7 | polkit | RHSA-yyyy:xxxx |
[1] 公告/更新链接将在更新发布后添加。
[2] 什么是 Red Hat Enterprise Linux 延长更新支持(EUS)订阅?
[4] 什么是 Red Hat Enterprise Linux SAP 解决方案订阅?
[5] 访问此修补程序需要一个有效的 延长生命周期支持(ELS) 订阅。 如果您的帐户并没有包括有效的 ELS 订阅,请联系红帽销售部门或您的销售代表以获取更多信息。
诊断
一个安全漏洞检测脚本已被开发,用来检查您的系统当前是否存在相关的安全漏洞。要验证脚本的真实性,您还可以下载 分离的 OpenPGP 签名。红帽客户门户网站上提供了有关如何使用GPG签名进行验证说明。
Ansible Playbook
此外,还提供了一个 Ansible playbook,可自动执行上述的缓解措施。此 playbook 将安装使用 systemtap 所需的软件包,然后创建并安装 systemtap 脚本,以防止使用没有参数的 pkexec 命令。此缓解措施需要在重启后重新应用,这可以通过重新运行 playbook 来实现。
要使用该 playbook,请将要应用缓解措施的主机的 Ansible 清单名称定义为额外的变量 HOSTS。例如:
ansible-playbook -e HOSTS=web,ns1,mail CVE-2021-4034_stap_mitigate.yml
要验证 playbook 的真实性,您可以下载 分离的 OpenPGP 签名。红帽客户门户网站上提供了有关 如何使用 GPG 签名进行验证 的说明。
常问问题解答
问:应用了修复后,需要重启任何服务或系统以确保系统不受这个安全漏洞的影响?
答:不需要重启任何服务或重启系统。该修复程序应用于 pkexec ,它是 polkit 套件的一个工具。它是单实例运行,一旦应用了更新,下一次执行 pkexec 时,它应该加载修补的应用程序。应用了更新后,更新过程会重启 polkit 服务。
问:应用推荐的缓解措施后,是否需要重启系统或服务?
答:应用缓解措施后不需要重启系统。SystemTap 本身将确保加载内核模块。
问:作为缓解措施,是否可以安全地从 pkexec 二进制文件中删除 setuid 权限?
答:红帽不推荐删除 setuid 位,因为它会对系统造成破坏。从 pkexec 二进制文件中删除 setuid 权限将阻止它正常工作。这意味着,任何依赖于 pkexec 执行的应用程序都会停止工作,从而可能导致意外的系统错误和行为。虽然针对此漏洞的 Qualys 公告把删除 setuid 作为潜在的缓解措施列出,但对于我们的客户,这并不是一个不会导致系统被破坏的、可行的缓解方案。红帽提供另一种缓解措施,在应用时对 pkexec 的功能没有负面影响。任何缓解方案应该只在短期内使用,并在相应的补丁发布时进行更新。
问:对 OpenShift Container Platform 的影响是什么?
答:在 OpenShift Container Platform(OCP)中,Ge polkit 软件包包含在 RHCOS 中,它们用于集群节点。对 OCP 节点的访问仅限于集群管理员。如果某人可以直接连接到 OCP 节点,这代表已是 root 用户,因此 polkit 软件包是否存在这个安全漏洞并没有实际的意义。
polkit 软件包也会在多个 OCP 容器镜像中提供,供集群管理员用于管理 OCP 集群。这些镜像作为特权容器运行,因此有权访问这些容器的任何人已具有完全管理员访问权限。
问:我使用 Docker 运行 Red Hat Enterprise Linux 7.x。重启后,我的容器无法通过网络访问。我该怎么办?
答:当 Docker 启动时,它会将 net.ipv4.ip_forward 设置为 1,允许 IP 转发,这使得容器可以通过网络访问。但是,它不会在机器配置中保留。更新 polkit 软件包时,polkit 服务将自动在 Red Hat Enterprise Linux 服务器上重新启动,并最终触发系统重新载入内核配置。这会覆盖非持久性的 sysctl 条目,从而导致无法通过网络访问 Docker 容器。为避免这个问题,系统管理员需要确保 net.ipv4.ip_forward 需要的值保持在 sysctl 配置文件中。有关此过程的更多信息,请参阅如何在 Red Hat Enterprise Linux 中设置 sysctl 变量。
致谢
红帽感谢 Qualys Research 团队报告了此漏洞。
参考信息
https://access.redhat.com/security/cve/CVE-2021-4034
Comments