阿里云容器服务已修复runc漏洞CVE-2019-5736。本文介绍该漏洞的影响范围及解决方法。

背景信息

Docker、containerd或者其他基于runc的容器在运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作获取到宿主机runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。

漏洞CVE-2019-5736的详细信息,请参见CVE-2019-5736

影响范围

  • 对于阿里云容器服务而言,影响范围如下:

    Docker版本 < 18.09.2 的所有Docker Swarm集群和Kubernetes集群(不包含Serverless Kubernetes集群)

  • 对于用户自建的Docker/Kubernetes环境而言,影响范围如下:

    Docker版本 < 18.09.2 或者使用 runc版本 <= 1.0-rc6的环境。

解决方法

阿里云容器服务已经修复该漏洞,新创建的1.11或1.12版本的Kubernetes集群中的Docker版本已修复该漏洞。您可以通过以下方法修复已有集群中的漏洞:

  • 升级Docker。升级已有集群的Docker到18.09.2或以上版本。该方案会导致容器和业务中断。
  • 仅升级runc(针对Docker版本17.06)。为避免升级Docker引擎造成的业务中断,可以按照以下步骤,逐一升级集群节点上的runc二进制。
    1. 执行以下命令定位docker-runc。docker-runc通常位于/usr/bin/docker-runc路径下。
      which docker-runc
    2. 执行以下命令备份原有的runc:
      mv /usr/bin/docker-runc /usr/bin/docker-runc.orig.$(date -Iseconds)
    3. 执行以下命令下载修复的runc:
      curl -o /usr/bin/docker-runc -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/docker-runc-17.06-amd64
    4. 执行以下命令设置docker-runc的可执行权限:
      chmod +x /usr/bin/docker-runc
    5. 执行以下命令测试runc是否可以正常工作:
      docker-runc -v
      # runc version 1.0.0-rc3
      # commit: fc48a25bde6fb041aae0977111ad8141ff396438
      # spec: 1.0.0-rc5
      docker run -it --rm ubuntu echo OK
    6. 如果是Kubernetes集群中的GPU节点,还需要完成以下步骤继续安装下nvidia-runtime。
      1. 执行以下命令定位nvidia-container-runtime。nvidia-container-runtime通常位于/usr/bin/nvidia-container-runtime路径下。
        which nvidia-container-runtime
      2. 执行以下命令备份原有的nvidia-container-runtime:
        mv /usr/bin/nvidia-container-runtime /usr/bin/nvidia-container-runtime.orig.$(date -Iseconds)
      3. 执行以下命令下载修复的nvidia-container-runtime:
        curl -o /usr/bin/nvidia-container-runtime -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/nvidia-container-runtime-17.06-amd64
      4. 执行以下命令设置nvidia-container-runtime的可执行权限:
        chmod +x /usr/bin/nvidia-container-runtime
      5. 执行以下命令测试nvidia-container-runtime是否可以正常工作:
        nvidia-container-runtime -v
        #  runc version 1.0.0-rc3
        #  commit: fc48a25bde6fb041aae0977111ad8141ff396438-dirty
        #  spec: 1.0.0-rc5
        
        docker run -it --rm -e NVIDIA_VISIBLE_DEVICES=all ubuntu nvidia-smi -L
        #  GPU 0: Tesla P100-PCIE-16GB (UUID: GPU-122e199c-9aa6-5063-0fd2-da009017e6dc)
        说明 本测试运行在GPU P100机型中,不同GPU型号测试方法会有区别。