针对近期爆出 runc 容器逃逸漏洞的安全警示及防范建议

尊敬的用户:

针对近期暴露的 runc 容器逃逸漏洞,青云 QingCloud 一直在密切观察和研究,同时与您同步以下信息并期望获得您的重视:

什么是 runc

Runc 是一个根据 OCI (Open Container Initiative) 标准构建的并运行容器的底层工具,诸如 Docker,Containerd 以及 CRI-O 都以其为底层核心去处理数据的格式化和序列化。而 Kubernetes 作为容器调度管理平台基于这些容器运行环境,也受到了此漏洞的影响。

此漏洞(CVE-2019-5736)可能会造成的影响

引自 runc 团队的 Aleksa Sarai 的解释(翻译稿):“此项安全漏洞允许恶意容器(在最低用户交互等级下)覆盖主机 runc 二进制文件,这意味着攻击者将借此获得在主机上以 root 层级执行代码的权限。”

“具体来讲,攻击者能够利用一套其可以控制的镜像创建新的容器,或者是向其能够访问的现有容器之内添加 docker exec 文件。在这类情况下的任意容器当中,该攻击者都将能够通过当前用户交互等级以 root 权限运行任意命令(无论命令本身是否由攻击者所控制)。”

 

降低风险以及规避漏洞的建议

  • 严格控制集群的外网访问权限
  • 不下载和运行来历不明的容器镜像
  • 以 non-0 方式运行容器镜像(在 securityContext 中配置 runAsUser)
    apiVersion: v1
    kind: Pod
    metadata:
      name: run-as-uid-1000
    spec:
      securityContext:
        runAsUser: 1000
      # ...
  • 升级 docker 或者 runc
    升级 Docker 至 18.06.2,可参考官方文档(注意:此版本仅兼容 4.x 内核,请谨慎升级)
    runc 升级参考:
    1. 定位 runc 的执行文件位置:

    which docker-runc

    2. 备份此文件:

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

    3. 获取对应 OS 和 docker 版本的 runc 执行文件,并复制到相应目录:

    cp runc-v18.06.1-amd64 /usr/bin/docker-runc

    4. 确保 docker-runc 具有可执行权限:

    chmod +x /usr/bin/docker-runc

    5. 验证其能否正常工作:

    docker-runc -v
    docker run -it --rm ubuntu echo OK

在以上配置升级过程中碰到任何问题,您可联系青云客服获取我们的支持。

青云 QingCloud 平台可能受影响的服务及产品

公有云容器服务:Kubernetes On QingCloud

容器产品:KubeSphere

我们容器团队会在近期发布 Kubernetes On QingCloud 以及 KubeSphere 的升级版本进行漏洞修复。