runc - Malicious container escape - CVE-2019-5736

Public Date: February 11, 2019, 08:13
已更新 March 8, 2019, 11:12 - English(英语) Japanese Korean
Resolved 状态
Important Impact

Insights vulnerability analysis

View exposed systems

在 runc 中发现了一个漏洞,恶意容器可以利用这个漏洞获得所在主机的 root 级别的访问权限。这个安全问题已被记录为 CVE-2019-5736,它的安全影响级别被定为 Important(重要)

背景信息

在 runc 中发现了一个安全漏洞,利用这个漏洞,可以突破容器的边界获得所在主机的 root 级别的访问权限。

此安全漏洞会影响到 Red Hat Enterprise Linux 7 中的 docker 和 runc 软件包(由 Extras 频道提供)。OpenShift Container Platform (OCP) 3.x 依赖于由 Red Hat Enterprise Linux 7 Extras 提供的这些软件包,因此也会受到这个安全漏洞的影响。

当 SELinux 处于 enforcing 模式时(这是部署 OpenShift Container Platform 3.x 所需的前提条件之一),这个安全漏洞的影响会在 Red Hat Enterprise Linux 7 上获得缓解。

需要采取的行动

我们强烈建议,运行受影响版本的红帽产品的用户,在相关勘误可用后,尽快使用由 RHEL 7 Extras 频道提供的相关 RPM 进行更新。 使用 OpenShift Online 或 OpenShift Dedicated 的用户需要在所有集群的每个主机上启用 SELinux,并把它设置为 enforcing 模式。我们计划在下一个维护窗口期间应用相关的安全补丁程序,从而使 OSO/OSD 不再受这个安全漏洞的影响。

致谢

红帽借此感谢上游的 Open Containers Security Team 报告了这个问题。上游社区确认 Adam Iwaniuk 和 Borys Popławski 发现了这个安全漏洞。

额外资源

红帽博客

https://seclists.org/oss-sec/2019/q1/119

受影响的产品

红帽产品安全团队把 CVE-2019-5736 的安全影响级别定为 Important(重要)

以下红帽产品版本会受影响:

  • Red Hat Enterprise Linux 7

  • Red Hat OpenShift Container Platform 3.x

  • Red Hat OpenShift Online*

  • Red Hat OpenShift Dedicated*

*因为 SELinux 已被设置为 enforcing 模式,OpenShift Online 和 Dedicated 不会受到这个安全漏洞的影响。


检测试图利用这个安全漏洞进行攻击的行为

把 SELinux 设置为 enforcing 模式的用户可以通过在审计日志中查看 AVC 事件来发现试图利用这个安全漏洞进行攻击的行为。例如

$ aureport -a

AVC Report

===============================================================

# date time comm subj syscall class permission obj result event

===============================================================

1. 11/02/19 00:00:00 script system_u:system_r:container_t:s0:c530,c886 2 file write system_u:object_r:container_runtime_exec_t:s0 denied 81359

以上事件显示,一个带有 system_u:system_r:container_t 上下文的进程试图对一个带有 system_u:object_r:container_runtime_exec_t 上下文的文件进行写操作。这个行为被 Red Hat Enterprise Linux 7 的默认策略所拒绝。

请注意:虽然当 SELinux 为 permissive 模式时 AVC 事件也会记录在审计日志中,但是如果攻击者已获得 root 级别的访问权限,则可以对日志中的数据进行修改。因此,在此种情况下,依赖日志记录是不可靠的。


诊断安全漏洞

检查您的系统是否存在这个安全漏洞

检查您的系统是否存在这个安全漏洞。使用以下提供的检测脚本来检测您的系统当前是否存在这个安全问题。要检查脚本的真实性,请同时下载 GPG 签名

相关的修复已可以通过 Red Hat Enterprise Linux Extras 频道获得。使用 OpenShift Container Platform 版本 3.4 或更高版本的用户应该进行相应的更新。

当 SELinux 为 targeted enforcing 模式时,这个安全漏洞的影响将会缓解,它可以完全防止对这个安全漏洞进性利用。Red Hat Enterprise Linux 7 中 SELinux 的默认设置为 targeted enforcing 模式。

如果 SELinux 已从默认的 enforcing 模式改为 permissive 模式,可以按照以下步骤把它重新设置为 enforcing 模式:

启用 SELinux

已更新到最新版本的用户将不需要进行进一步的缓解措施。但是,如果不能更新,则推荐实施相应的缓解方案。

对 OpenShift Online 和 OpenShift Dedicated 的缓解方案已就绪。在下一个维护窗口期间,会应用相应的安全补丁。

把 SELinux 设置为 enforcing 模式是 OpenShift Container Platform 3.x 平台的前提条件之一。

受影响产品的更新

产品软件包公告/更新
Red Hat Enterprise Linux 7 ExtrasdockerRHSA-2019:0304
Red Hat Enterprise Linux 7 Extrasdocker (1.12.x)待定
Red Hat Enterprise Linux 7 Extrasrunc

RHSA-2019:0303

Red Hat Enterprise Linux 7 Atomic Hostdocker待定
Red Hat Enterprise Linux 7 Atomic Hostrunc待定

使用 docker (或 docker-latest*) 的用户需要更新 docker 软件包,因为它带有自己的 runc 版本。使用 CRI-O、podman 或其它需要依赖 runc 的容器引擎用户,需要更新 runc 软件包。docker 和 runc 都由 Red Hat Enterprise Linux 7 Extras 频道提供。

OpenShift Container Platform (OCP) 版本 3.9 以及更高版本在默认设置中使用 docker 版本 1.13,但也可以使用 CRI-O 做为其替代。使用 OCP 3.9 及更高版本的用户需要根据具体情况,使用 Red Hat Enterprise Linux 7 Extras 频道提供的相应更新对 docker 或 runc 进行更新。

OCP 版本 3.4 到 3.7 使用 docker 版本 1.12(也由 Red Hat Enterprise Linux 7 Extras 频道提供)。针对 docker 版本 1.12 的安全勘误正在开发中。

Red Hat Enterprise Linux Atomic Host 7 使用和 Red Hat Enterprise Linux 7 Extras 相同的 'docker' 和 'runc' 软件包,但这些软件包是通过 ostrees 提供的。在更新的 'docker' 和 'runc' 软件包可以由 ostrees 提供前,使用 Atomic Host 的用户可以按照以下方法使用 Extras 频道所提供的最新版本的软件包:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/installation_and_configuration_guide/managing_atomic_hosts#overriding_an_existing_rpm_package

*请注意:docker-latest 在 Red Hat Enterprise Linux 7.5 中已过时,因此不再被支持。使用 docker-latest 软件包的用户需要升级到由 Red Hat Enterprise Linux 7 Extras 提供的 docker 软件包。详情请参阅:https://access.redhat.com/solutions/3092401

**请注意:OpenShift Container Platform 3.9 初始带有自己版本的 runc 软件包(在 OCP 3.9 repository 中),但是 Red Hat Enterprise Linux 7 Extras 中的 runc 版本已取代了 OCP 3.9 中的版本。如果运行 OCP 3.9 集群,runc 应该已被 Red Hat Enterprise Linux Extras 频道中提供的版本更新。



Ansible Playbook

一个相应的 Ansible playbook 已被提供,它在软件包已安装的情况下可以对软件包进行更新。这个脚本对于 docker-latest(已不再被支持)会失败。为了验证脚本的真实性,可以下载相应的 GPG 签名

playbook 会针对名为 HOSTS 的变量运行,它可以使用以下方法执行(假设 'hostname' 已在 inventory 文件中定义):

# ansible-playbook -e HOSTS=hostname cve-2019-5736-update_fixit.yml 	

这个 playbook 需要有 root 权限,因此您需要使用一个具有相应权限的账户。


Comments