关于runc漏洞CVE-2019-5736的影响范围及修复方案

2019-3-20 两寸土 服务器

阿里云

Docker、containerd或者其他基于runc的容器在运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作获取到宿主机runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。
更多漏洞CVE-2019-5736的详细信息,请参见https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736。
阿里云容器服务已修复该runc漏洞。
影响范围
对于阿里云容器服务而言,影响范围如下:Docker版本 < 18.09.2 的所有Docker Swarm集群和Kubernetes集群(不包含Serverless Kubernetes集群)
对于用户自建的Docker/Kubernetes环境而言,影响范围如下:Docker版本 < 18.09.2 或者使用 runc版本 <= 1.0-rc6的环境。请自行根据厂商建议进行修复。
解决方法
新建Kubernetes1.11或1.12集群。容器服务新创建的1.11或1.12版本的Kubernetes集群已经包含修复该漏洞的Docker版本。
升级Docker。升级已有集群的Docker到18.09.2或以上版本。该方案会导致容器和业务中断。
仅升级runc(针对Docker版本17.06)。为避免升级Docker引擎造成的业务中断,可以按照以下步骤,逐一升级集群节点上的runc二进制。
i 执行以下命令定位docker-runc。docker-runc通常位于/usr/bin/docker-runc路径下

which docker-runc

ii 执行以下命令备份原有的runc:

mv /usr/bin/docker-runc /usr/bin/docker-runc.orig.$(date -Iseconds)

iii 执行以下命令下载修复的runc:

curl -o /usr/bin/docker-runc -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/docker-runc-17.06-amd64

iv 执行以下命令设置docker-runc的可执行权限:

chmod +x /usr/bin/docker-runc

v 执行以下命令测试runc是否可以正常工作:

docker-runc -v
# runc version 1.0.0-rc3
# commit: fc48a25bde6fb041aae0977111ad8141ff396438
# spec: 1.0.0-rc5
docker run -it --rm ubuntu echo OK

vi 如果是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型号会有区别。
也请移步阿里云文档,更便捷复制操作代码:https://help.aliyun.com/document_detail/107320.html

腾讯云

【漏洞详情】
runc是一个轻量级通用容器运行环境,它是一个命令行工具,可以根据开放容器方案(Open Container Initiative)生成和运行容器,该漏洞若被利用,会允许恶意容器(以最少的用户交互)覆盖Host上的runc文件,从而在Host上以root权限执行代码,进而攻击其它容器或Host。目前CVSSv3官方评分达7.2分。

【风险等级】
高风险

【漏洞风险】
容器逃逸攻击风险,存在漏洞的runc被利用后可以获取Host的root权限,并利用该权限攻击其他容器或机器。

【影响版本】
除runc之外,Apache Mesos、LXC也在受影响之列。

【修复建议】
若您使用的是腾讯云容器服务TKE, 您可以通过以下方法进行漏洞修复

  1. TKE 已经修复增量版本,新创建的集群新加入的节点不受影响

  2. 若Docker版本为17.12.x的容器节点(请通过docker version查看),可用root权限执行以下命令升级runc版本。此方法不影响该节点正在运行的业务。

    wget  http://static.ccs.tencentyun.com/docker17.12-runc-e25b2183f 
    chmod +x ./docker17.12-runc-e25b2183f
    mv /usr/bin/docker-runc /usr/bin/docker-runc-$(date -Iseconds)
    mv docker17.12-runc-e25b2183f /usr/bin/docker-runc
    

    验证是否升级成功:
    执行docker-runc -v, 应该看到如下版本信息:

    runc version 1.0.0-rc4+dev
    commit: e25b2183f48e942cb41582898acbf7e24b5d2f31
    spec: 1.0.0
    

    注意:对于黑石和TCE用户,请使用公网链接下载docker17.12-runc-e25b2183f:
    https://github.com/TencentCloudContainerTeam/TKE_packages/releases/download/runc-CVE-2019-5736/docker17.12-runc-e25b2183f

  3. 若Docker版本为1.12.x的容器节点(请通过docker version查看),可用root权限执行以下命令升级runc版本。此方法不影响该节点正在运行的业务。

    wget  http://static.ccs.tencentyun.com/docker1.12-runc-20c0351b 
    chmod +x ./docker1.12-runc-20c0351b
    mv /usr/bin/docker-runc /usr/bin/docker-runc-$(date -Iseconds)
    mv docker1.12-runc-20c0351b /usr/bin/docker-runc
    

    验证是否升级成功:
    执行docker-runc -v, 应该看到如下版本信息:

    runc version 1.0.0-rc2
    commit: 20c0351ba557183e6b54075e862f20a07f50aad3
    spec: 1.0.0-rc2-dev
    

    注意:对于黑石和TCE用户,请使用公网链接下载docker1.12-runc-20c0351b:
    https://github.com/TencentCloudContainerTeam/TKE_packages/releases/download/runc-CVE-2019-5736/docker1.12-runc-20c0351b

  4. 目前TKE已修复增量Docker版本,除了以上方法2或3,存量的节点也可以通过移除集群再加入集群触发节点重新初始化进行修复,此方法不限制docker版本但会造成节点重装,操作前请先备份数据!(若是k8s1.7或者k8s1.4的TKE集群,该操作会将节点上的Docker版本由1.12.6升级到17.12.1,不影响业务使用)

【漏洞参考】
1)漏洞详情:https://www.openwall.com/lists/oss-security/2019/02/11/2
2)修复参考:https://github.com/opencontainers/runc/commit/0a8e4117e7f715d5fbeef398405813ce8e88558b
3)LXC修复:https://github.com/lxc/lxc/commit/6400238d08cdf1ca20d49bafb85f4e224348bf9d

« 上一篇:Node 执行shell | 下一篇:Mac 下 小米8SE刷机»

发表评论 登录

Top