当前位置:首页 > 网络安全 > 安全通告 > 详情
安全漏洞预警通告—runc容器逃逸漏洞预警(CVE-2019-5736)
2019年02月15日   

  1、基本情况

  runc的容器存在安全漏洞。CVE编号:CVE-2019-5736。攻击者可以通过特定的容器镜像或者exec操作,然后获取到宿主机的runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。

  2、攻击原理

  该漏洞允许恶意容器(以最少的用户交互)覆盖host上的runc文件,从而在host上以root权限执行代码。在下面两种情况下,通过用户交互可以在容器中以root权限执行任意代码:

  1) 使用攻击者控制的镜像创建新容器。

  2) 进入到攻击者之前具有写入权限的现有容器中(docker exec)。

  攻击者将容器中的目标文件替换成指向runc的自己的文件来欺骗runc执行自己。比如目标文件是/bin/bash,将它替换成指定解释器路径为#!/proc/self/exe的可执行脚本,在容器中执行/bin/bash时将执行/proc/self/exe,它指向host上的runc文件。

  然后攻击者继续写入/proc/self/exe覆盖host上的runc文件。一般来说不会成功,因为内核不允许在执行runc时覆盖它。但是攻击者可以使用O_PATH标志打开/proc/self/exe的文件描述符,然后通过/proc/self/fd/<nr>使用O_WRONLY标志重新打开文件,并尝试在一个循环中从一个单独的进程写入该文件。当runc退出时覆盖会成功,在此之后,runc可以用来攻击其它容器或host。

  3、影响范围

  1) Docker版本 < 18.09.2 的所有Docker Swarm集群和Kubernetes集群(不包含Serverless Kubernetes集群)。

  2) Docker版本 < 18.09.2 或者使用 runc版本 <= 1.0-rc6的环境。

  4、处置建议

  1) 新建k8s 1.11或1.12集群。容器服务新创建的1.11或1.12版本的Kubernetes集群已经包含修复该漏洞的Docker版本。

  2) 升级已有集群的Docker到18.09.2或以上版本。但是该方案会导致容器和业务中断,需谨慎考虑。

  3) 仅升级runc(针对Docker版本17.06)。为避免升级Docker引擎造成的业务中断,可以逐一升级集群节点上的runc二进制。

  5、 参考链接

  1) http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736

  2) https://www.openwall.com/lists/oss-security/2019/02/11/2