容器引擎CCE

    漏洞修复公告

    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'

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

    上一篇
    应用场景
    下一篇
    产品定价