runc容器漏洞CVE-2019-5736的修复

 Docker君   2019-02-15 14:43   142 人阅读  0 条评论

背景说明


   runc是一个根据OCI(Open Container Initiative)标准创建并运行容器的CLI tool,目前Docker引擎内部也是基于runc构建的。2019年2月11日,研究人员通过oss-security邮件列表披露了runc容器逃逸漏洞的详情,根据OpenWall的规定EXP会在7天后也就是2019年2月18日公开。


    此漏洞允许以root身份运行的容器以特权用户身份在主机上执行任意代码。这意味着容器可能会破坏Docker主机(覆盖Runc CLI),而所需要的只是能够使用root来运行容器。攻击者可以使用受感染的Docker镜像或对未受感染的正在运行的容器运行exec命令。


    更多漏洞CVE-2019-5736的详细信息,请参见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的环境。请自行根据厂商建议进行修复。



解决方法

  • 新建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。

          a、执行以下命令定位nvidia-container-runtime。nvidia-container-runtime通常位于/usr/bin/nvidia-container-runtime路径下。

         which nvidia-container-runtime

          b、执行以下命令备份原有的nvidia-container-runtime:

         mv /usr/bin/nvidia-container-runtime /usr/bin/nvidia-container-runtime.orig.$(date -Iseconds)

          c、执行以下命令下载修复的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

          d、执行以下命令设置nvidia-container-runtime的可执行权限:

         chmod +x /usr/bin/nvidia-container-runtime

          e、执行以下命令测试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型号会有区别。


往期精彩

《Docker是什么?》

Kubernetes是什么?

《Kubernetes和Docker到底有啥关系?》

教你如何快捷的查询选择网络仓库镜像tag

《Docker镜像进阶:了解其背后的技术原理》

《教你如何修改运行中的容器端口映射》

k8s学习笔记:介绍&上手

k8s学习笔记:缩扩容&更新

《Docker君带你认识Docker Swarm》

Docker 基础用法和命令帮助

在K8S上搭建Redis集群

灰度部署、滚动部署、蓝绿部署


dockerchina

本文地址:http://dockerchina.cn/?id=7
版权声明:本文为原创文章,版权归 Docker君 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?