所有文档

          容器引擎 CCE

          漏洞CVE-2019-5736修复公告

          runc容器逃逸漏洞修复方案(CVE-2019-5736)

          解决方法

          可以采用以下三种方法中选择合适的方式修复安全漏洞:

          1. 新建 Kubernetes 集群,kubernetes 1.11.5 的 docker 版本已更新至 18.09.2,该版本已修复漏洞。
          2. 节点替换,在集群中扩容入新的节点,容器漂移稳定后将旧节点缩容处理。扩容节点的 docker-runc 均已修复漏洞。该方案会造成容器漂移和业务流量风险。1.8 存量集群添加节点时,新节点的 docker 版本不变,runc 已打上漏洞补丁,1.11.1 及以上存量集群的新扩容节点,docker 已整体更新为 18.09.2 版本。
          3. 单独升级 runc(1.11的 GPU 集群建议采用上面两种方案),从 docker-18 开始,docker-runc 更名为 runc,以下方案针对 docker-18 之前的版本。
          • 定位 docker-runc 位置,并备份。

            $ which docker-runc # 正常为 /usr/bin/docker-runc
            $ mv /usr/bin/docker-runc /usr/bin/docker-runc.orig.$(date -Iseconds)
          • 执行以下执行,下载修复的 runc:

            $ curl -o /usr/bin/docker-runc https://baidu-container.cdn.bcebos.com/packages/runc/runc-v1.0.0-rc2
            $ chmod +x /usr/bin/docker-runc
          • 检查 runc 是否正常执行

            $ docker-runc -v
            runc version 1.0.0-rc2
            commit: b1adfd870be901735b1509e9560eec508bdfca1f
            spec: 1.0.0-rc2-dev
          • 检查 docker 是否正常运行(因版本和负载差异,显示会有区别):

            $ docker version
            Client:
             Version:      17.03.2-ce
             API version:  1.27
             Go version:   go1.7.5
             Git commit:   f5ec1e2
             Built:        Tue Jun 27 01:35:00 2017
             OS/Arch:      linux/amd64
            Server:
             Version:      17.03.2-ce
             API version:  1.27 (minimum version 1.12)
             Go version:   go1.7.5
             Git commit:   f5ec1e2
             Built:        Tue Jun 27 01:35:00 2017
             OS/Arch:      linux/amd64
             Experimental: false

          检查容器运行状态:

          $ docker ps
          CONTAINER ID        IMAGE                                                                                                                      COMMAND                  CREATED             STATUS              PORTS               NAMES
          52d0c793caf9        hub-readonly.baidubce.com/public/pause:2.0                                                                                 "/pause"                 3 hours ago         Up 3 hours                              k8s_POD_node-exporter-klfks_kube-system_c8560cf5-3014-11e9-88b7-fa163e8b0a7e_0
          9b6d830d4ba3        hub-readonly.baidubce.com/public/pause:2.0                                                                                 "/pause"                 3 hours ago         Up 3 hours                              k8s_POD_csi-bosplugin-g9ctz_kube-system_c855cf61-3014-11e9-88b7-fa163e8b0a7e_0

          安全建议

          由于该漏洞需要利用容器内的 UID 0 用户进行攻击,也可以通过修改容器内的默认用户为非 root 用户,或通过 Kubernetes 的安全限制来达到屏蔽漏洞的目的。

          • 通过securityContext 限制 UID 为非 0

            apiVersion: v1
            kind: Pod
            metadata:
              name: run-as-uid-1000
            spec:
              securityContext:
                runAsUser: 1000
          • 利用 PodSecurityPolicy 限制容器的权限

            apiVersion: policy/v1beta1
            kind: PodSecurityPolicy
            metadata:
              name: non-root
            spec:
              privileged: false
              allowPrivilegeEscalation: false
              runAsUser:
                # Require the container to run without root privileges.
                rule: 'MustRunAsNonRoot'

          此外,也要确保所有的容器镜像都经过审查和且可信的。这可以通过自己构建所有镜像,或者通过审查镜像的内容然后固定到镜像的版本哈希来实现。

          上一篇
          漏洞CVE-2020-14386修复公告