漏洞详情:
Docker、containerd或者其他基于runc的容器运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。
详见 https: //cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736
影响范围:
对于阿里云容器服务来说,影响范围:
- Docker版本 < 18.09.2 的所有Docker Swarm集群和Kubernetes集群(不包含Serverless Kubernetes集群)
对于用户自建Docker/Kubernetes环境:
- Docker版本 < 18.09.2 或者使用 runc版本 <= 1.0-rc6的环境,请自行根据厂商建议进行修复。
解决办法:
- 方案一:新建k8s 1.11或1.12集群。容器服务新创建的1.11或1.12版本的Kubernetes集群已经包含修复该漏洞的Docker版本。
- 方案二:升级Docker。升级已有集群的Docker到18.09.2或以上版本。该方案会导致容器和业务中断。
- 方案三:仅升级runc(针对Docker版本17.06)。为避免升级Docker引擎造成的业务中断,可以按照下文的步骤文档,逐一升级集群节点上的runc二进制。
针对方案三中Docker 17.06版本的步骤文档:
# 找到docker-runc的位置,一般情况下在: /usr/bin/docker-runc
which docker-runc
# 备份原有的runc
mv /usr/bin/docker-runc /usr/bin/docker-runc.orig.$(date -Iseconds)
# 下载修复的runc
curl -o /usr/bin/docker-runc -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/docker-runc-17.06-amd64
# 设置它的可执行权限
chmod +x /usr/bin/docker-runc
# 测试runc可以正常工作
docker-runc -v
# runc version 1.0.0-rc3
# commit: fc48a25bde6fb041aae0977111ad8141ff396438
# spec: 1.0.0-rc5
docker run -it --rm ubuntu echo OK
# 如果是Kubernetes的GPU节点,还需要额外安装下nvidia-runtime
# 找到nvidia-container-runtime的位置,一般情况下在: /usr/bin/nvidia-container-runtime
which nvidia-container-runtime
# 备份原有的nvidia-container-runtime
mv /usr/bin/nvidia-container-runtime /usr/bin/nvidia-container-runtime.orig.$(date -Iseconds)
# 下载修复的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
# 设置它的可执行权限
chmod +x /usr/bin/nvidia-container-runtime
# 测试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型号会有区别。