Translated message

A translation of this page exists in English.

Runc 问题回归 - docker-1.13.1-108 - CVE-2016-8867、CVE-2020-14298 和 CVE-2020-14300

Public Date: June 23, 2020, 7:00 pm
Updated -
Resolved Status
Important Impact

摘要

红帽为 Red Hat Enterprise Linux 7 Extras 发布了一个 docker 版本。这个版本中存在几个在以前已被修正的安全漏洞以及一个新的安全漏洞。这个存在问题的版本是红帽在 2020 年 1 月上旬发布的,这些问题已在 2020 年 2 月上旬发布的版本中被修复。红帽产品安全团队已把这个问题的安全影响严重性级别定为重要(Important)。使用带有这个安全漏洞版本的 docker 用户需要尽快升级到新的版本。 

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

  • Red Hat Enterprise Linux 7 Extras
  • Red Hat Enterprise Linux Atomic Host(版本 7.7.3.1 和 7.7.4)

以下红帽产品和服务可能会受到影响。这些产品的安全会依赖于 docker,在解决了这个问题的新版本发行前的这段较短时间内,存在安全漏洞的版本可能已通过 Red Hat Enterprise 7 Extras 频道被安装:

  • Red Hat Ceph Storage 2
  • Red Hat Ceph Storage 3
  • Red Hat OpenStack Platform 10 (*)
  • Red Hat OpenStack Platform 13
  • Red Hat OpenShift Container Platform 3.11
  • Red Hat Quay
  • Microsoft Azure OpenShift v3

请参照下面的诊断部分的内容,检查您的系统当前是否存在这些安全漏洞。 此外,下面还提供了一个可以自动修复这些问题的 Ansible playbook

* Red Hat OpenStack Platform 10 提供的带有 docker 的能力是一个技术预览。 

技术概述

2020 年 1 月 8 日通过 RHBA-2020:0053 发布了一个更新的 docker 版本,它包括在 Red Hat Enterprise Linux 7 Extras 软件仓库中。这个版本的 docker 软件包更新包括了一个存在安全漏洞的 runc 版本,它缺少了多个已由以前发布的勘误提供的多个补丁程序,从而导致多个软件错误和安全修复的回归问题。

这个版本的更新包括了 3 个与安全相关的问题。其中的两个安全问题是以前已被解决的安全漏洞(CVE-2020-14298 CVE-2020-14300)的回归。第三个安全漏洞是一个新漏洞(CVE-2016-8867),它不会影响以前 Red Hat Enterprise Linux 7 Extras 中的 docker 软件包。

所有这 3 个问题的安全影响严重性级别都被定为 重要(Important)

技术详情和缓解措施

CVE-2020-14298

此 CVE 被定义为 CVE-2019-5736(以前,已通过 RHSA-2019:0304 在 Red Hat Enterprise Linux 7 Extras 中的 docker 软件包中解决)解决方案的问题回归。此问题可以导致一个恶意容器或已被破坏的容器对容器所在的主机以及在同一个主机上运行的其他容器进行破坏。

通过使用 SELinux 的强制(enforcing)模式可以缓解此问题的影响。SELinux 策略可防止容器中的进程覆盖主机系统上不属于该容器的文件,以及属于其他容器的文件。要在主机上实现进一步的特权升级,则需要利用其他内核漏洞以允许绕过或禁用 SELinux。另外,已知的利用这个问题进行安全攻击需要覆盖 docker-runc 二进制文件。将这个二进制文件放在只读文件系统上可防止覆盖行为的发生并阻止利用这个漏洞进行安全攻击的行为。Red Hat Enterprise Linux Atomic Host 7 对于系统级二进制文件使用只读的文件系统,因此可以缓解这个问题。

CVE-2020-14300

此 CVE 被定义为 CVE-2016-9962(以前,已通过 RHSA-2017:0116 在 Red Hat Enterprise Linux 7 Extras 中的 docker 软件包中解决)解决方案的问题回归。此问题可以导致一个恶意容器或已被破坏的容器对容器所在的主机以及在同一个主机上运行的其他容器进行破坏。

通过使用 SELinux 的强制(enforcing)模式可以缓解此问题的影响。SELinux 策略可防止容器中的进程覆盖主机系统上不属于该容器的文件,以及属于其他容器的文件。要在主机上实现进一步的特权升级,则需要利用其他内核漏洞以允许绕过或禁用 SELinux。

CVE-2016-8867
对环境功能的不正确设置会导致容器内的非 root 进程以意外的能力运行,从而使它们可以在容器内将权限升级到 root。 当这个问题最初在 2016 年报告时,它当时并未影响到 Red Hat Enterprise Linux 7 Extras 提供的任何版本的 docker 软件包。 

由于出现了问题回归,docker-1.13.1-108.git4ef4b30.el7 软件包变得会受这个安全漏洞的影响。 这个特定的版本是唯一包含问题回归的版本,它是唯一会受到这个问题影响的版本。

通过使用 --cap-add 和 --cap-drop 选项来限制容器内的进程可用的功能集,可以缓解此问题。但是,由于此类限制同时适用于非 root 进程和 root 进程,因此必须为每个容器确定在不破坏预期功能的情况下可以丢弃的功能集,并且可能不会阻止特权提升的发生。因此,红帽建议用户使用已修正了这个安全漏洞的 docker 软件包版本,而不是使用这个缓解方案。

背景信息

2020 年 1 月 8 日,红帽发布了 RHBA-2020:0053 ,它包括了 docker-1.13.1-108.git4ef4b30.el7。在发布后马上发现,docker-1.13.1-108.git4ef4b30.el7 包括了多个回归问题。经过研究发现,这些回归问题是因为 runc 使用 master branch 而不是特定于红帽的 branch 进行构建造成的。因此,这个版本的软件包缺少了多个主要的补丁(错误修复、功能增强和安全修复)。

2020 年 2 月 4 日,红帽发布了RHBA-2020:0427 ,其中提供的 docker-1.13.1-109.gitcccb291.el7_7 是根据正确的 runc branch 进行构建的,它包括了以前缺少的补丁。在这个版本发行后,回归问题没有再次出现。

2020 年 6 月 23 日,红帽发布了 RHSA-2020:2653,它包括了 docker-1.13.1-162.git64e9980.el7_8。与前一个发布的 docker-1.13.1-161.git64e9980.el7_8(通过 RHSA-2020:1234)相比,这个版本并没有提供新的安全修复。与 docker-1.13.1-109.gitcccb291.el7_7 相比,它也没有包括与 CVE-2020-14298、CVE-2020-14300 和 CVE-2016-8867 相关的、新的安全修复。以上 3 个安全漏洞已在 docker-1.13.1-109.gitcccb291.el7_7 中被解决。发布此勘误的主要目的是确保用户明确了解到 docker-1.13.1-108.git4ef4b30.el7 软件包中引入的回归问题,这些问题以前只是通过程序错误修复公告(RHBA)而不是安全公告(RHSA)解决的。此勘误还确保用户明确了解与安全扫描工具相关的问题。

产品影响

只有 Red Hat Enterprise Linux Atomic Host 版本 7.7.3.1 和 7.7.4,以及 Red Hat Enterprise Linux 7 Extras 提供了存在安全漏洞的 docker 版本。但是,其他一些产品和服务如果依赖于 Red Hat Enterprise Linux 7 Extras 中的 docker 软件包,则也可能会受到影响。依赖 Red Hat Enterprise Linux 7 Extras 的产品需要更新其 docker 软件包来修复这些漏洞。请参照下面的诊断部分的内容,检查您的系统当前是否存在这些安全漏洞。

OpenShift Container Platform OCP 3.11

默认情况下,OCP 3.11 上与 CVE-2020-14298 和 CVE-2020-14300 相关的问题会被缓解,因为它启用了 SELinux,并且使用强制(enforcing)模式是安装步骤的一部分。
带有存在安全漏洞的 docker 版本的 OCP 3.11 会受到 CVE-2016-8867 的影响,但由于权限提升仅限于在单个容器内,因此该漏洞的整体影响并不大。

在 2020 年 1 月 8 日至 2 月 4 日之间安装或升级 3.11 集群的用户,很有可能安装了存在安全漏洞的 docker 版本,因此请尽快进行相关的检查。

Red Hat Ceph Storage 版本 2 和 3

Red Hat Ceph Storage 版本 3 使用 Red Hat Enterprise Linux 7 Extras 软件仓库提供的 docker 软件包。在安装 Red Hat Ceph Storage Dashboard 时,在 Ceph Storage 中会使用 docker 软件包来创建、部署和运行使用容器的应用程序,如 Grafana 和 Prometheus。
 
部署 Red Hat Ceph Storage 2 作为一个容器镜像时,Red Hat Ceph Storage 版本 2 也会使用 Red Hat Enterprise Linux 7 Extras 软件仓库所提供的docker。

在 Red Hat Ceph Storage 2 和 3 中,SELinux 的强制(enforcing)模式会被默认启用,这可以缓解 CVE-2020-14298 和 CVE-2020-14300 的问题。但是,这两个版本的 Ceph Storage 中的容器如果使用了存在安全漏洞的 docker 版本,则会受到 CVE-2016-8867 的影响。

Red Hay Quay

安装 Red Hat Quay 的过程包括启用 Red Hat Enterprise Linux 7 Extras 软件仓库,以及安装 docker 作为容器运行时来运行产品的容器镜像。  默认情况下,SELinux 会被启用,从而缓解了 CVE-2020-14298 和 CVE-2020-14300 的影响。第三个漏洞 CVE-2016-8867 将存在于该系统上运行的容器(包括 Red Hat Quay容器)中。

Red Hat OpenStack Platform 版本 10 和 13

Red Hat OpenStack 版本 10 和 Red Hat OpenStack 版本 13 均启用了 Red Hat Enterprise Linux 7 Extras 软件仓库,并从该位置安装 docker。在 Red Hat OpenStack 版本 10 中使用 docker 是一个技术预览功能。而在 Red Hat OpenStack 版本 13 中,docker 和容器被广泛使用,所有服务都作为容器运行(依赖于 docker)。

如果容器逃逸安全漏洞被利用,则影响将会很大,因为这些服务会管理整个 Red Hat OpenStack 基础架构。幸运的是,Red Hat OpenStack 的默认配置以强制(enforcing)模式运行 SELinux,这可以减少容器逃逸的可能性。此外,用于 overcloud 服务的镜像是受信任的,因此被恶意攻击的风险较小。

服务影响

红帽已确认,以下服务并未运行存在安全漏洞的 docker 版本,因此不受这些漏洞的影响:

    •    Red Hat OpenShift Dedicated v3
    •    Red Hat OpenShift Dedicated v4
    •    Red Hat OpenShift Online
    •    Red Hat Managed Integration
    •    Quay.IO
    •    cloud.redhat.com
    •    Microsoft Azure OpenShift v4

Microsoft Azure OpenShift v3

运行带有版本 16 和 17 的 Microsoft Azure OpenShift v3 集群的客户已确认不会受到影响,因为它们已被定期更新。两个运行版本 15 的较旧的集群会受到部分影响。请参阅上述的与 OpenShift Container Platform 3.11相关的信息:

    •    使用 SELinux 缓解了 CVE-2020-14298 和 CVE-2020-14300
    •    CVE-2016-8867 的问题会存在,但其影响会限制于在单个容器内的特权升级。

红帽正在与 Microsoft 合作,以确保与任何受影响的客户取得联系。

受影响产品的更新

我们强烈建议,所有运行受影响版本的红帽产品的用户,在相关勘误可用后尽快进行更新。用户应立即应用可用的更新并根据需要启用缓解措施。在我们的认证云供应商合作伙伴的环境中运行红帽产品的客户,请联系相关的云供应商以获取更多详细信息。

产品软件包公告/更新
Red Hat Enterprise Linux 7 ExtrasdockerRHSA-2020:2653

诊断

一个安全漏洞检测脚本已被开发,用来检查您的系统当前是否存在相关的安全漏洞。您可以下载 GPG 签名来验证脚本的真实性。

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

版本 1.0

漏洞检测脚本适用于当前支持的 Red Hat Enterprise Linux 版本。检测脚本还可以用于 Red Hat Enterprise Linux 上的层次产品。

或者,您可以使用一个简单的 shell 命令来检查安装的 docker 软件包的版本:

$ rpm -q docker

如果报告的版本是 docker-1.13.1-108.git4ef4b30.el7,则可能会受到此问题的影响。

Ansible Playbook

此外,下面还提供了一个可以自动修复这些问题的 Ansible playbook "CVE-2020-14297-14300-update_fixit--2020-06-23-1248_0.yml"。这个 playbook 将更新受影响的软件包。要使用这个 playbook,使用 HOSTS 变量指定要更新的主机:

ansible-playbook -e HOSTS=container_host,dev01 CVE-2020-14297-14300-update_fixit--2020-06-23-1248_0.yml

您可以下载 GPG 签名来验证脚本的真实性。

自动化缓解

版本 1.0

常问问题解答

问:在安装了更新的 docker 软件包后,是否需要重新引导或重新启动一些系统?
答: docker 守护进程将在 `yum update` 期间重启,并停止所有正在运行的容器。在执行 `yum update` 之前运行的所有容器都需要重新启动。要在 OpenShift Container Platform 3.11 中更新 docker,请遵循以下指南:

https://docs.openshift.com/container-platform/3.11/upgrading/os_upgrades.html

问:如果已在使用 docker 软件包版本 docker-1.13.1-109.gitcccb291.el7_7 或 docker-1.13.1-161.git64e9980.el7_8,是否需要马上安装 docker-1.13.1-162.git64e9980.el7_8 来解决这些问题?
答:不需要马上进行。CVE-2016-8867、CVE-2020-14298 和 CVE-2020-14300 的问题已在 docker-1.13.1-109.gitcccb291.el7_7 中被解决。包括在 RHSA-2020:2653 中的更新是为了确保用户恰当地了解了这些问题。有关更多详细信息,请参阅上面的背景信息。

问:Red Hat OpenShift Container Platform OCP 4.x 是否受到影响?
答:Red Hat OpenShift Container Platform 4.x 不受这个回归问题的影响。它使用 CRI-O 容器引擎而不是使用 docker。  虽然可以在 worker 节点上运行 Red Hat Enterprise Linux 7,但它使用 CRI-O,因此不受此漏洞的影响。

问:Red Hat OpenShift Container Storage (OCS) 是否受影响?
答:OCS 4.x 使用 OCP 4.x 作为基础,OCS 3.x 使用 OCP 3.x 作为基础。因此,OCP 的内容适用于对 OCS 的影响。

问:Red Hat Enterprise Linux 8 是否受影响?
答:Red Hat Enterprise Linux 8 不受这个回归问题的影响。它从未包含过存在安全漏洞的 docker 软件包版本。

问:其他供应商提供的 docker 软件包会受到 CVE-2020-14298 和 CVE-2020-14300 的影响吗?
答:这些 CVE 被分配给特定于红帽通过 Red Hat Enterprise Linux 7 Extras 提供的 docker 软件包的安全性回归问题。因此,这些 CVE 不适用于其他供应商提供的 docker 构建,包括 Docker Inc. 提供的或其他 Linux 发行版本中提供的上游社区构建。这些 CVE 可能适用于基于 Red Hat Enterprise Linux 源代码的项目,如 CentOS。

参考信息

有关与该问题有关的先前的两个安全漏洞的详细信息,请参阅:

runc - Malicious container escape - CVE-2019-5736
On-entry container attack - CVE-2016-9962