尊敬的用户:
针对近期暴露的 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 的升级版本进行漏洞修复。