runc容器逃逸误差清静通告
宣布时间 2019-02-13误差编号和级别
CVE编号:CVE-2019-5736,危险级别:严重, CVSS分值:官方未评定
影响规模
受影响版本:
runC 全版本
LXC 以及 Apache Mesos
误差概述
runc是一个凭证OCI(Open Container Initiative)标准建设并运行容器的CLI tool。现在docker引擎内部也是基于runc构建的。2019年2月11日,研究职员通过oss-security邮件列表披露了runc容器逃逸误差的详情,误差可能影响宽大云服务厂商,危害严重。
该误差允许恶意容器以最少的用户交互笼罩宿主机上的runC文件,从而在宿主机上以 root 权限执行恶意代码。当知足以下条件时,攻击者有可能以root权限执行恣意代码:
1. 使用攻击者控制的镜像建设新容器,或者攻击者具有某一docker容器的root权限
2. 攻击者可以使用docker exec方法进入上述容器
默认的AppArmor战略不可阻止该误差。同样在Fedora上,默认的SELinux战略也不可阻止该误差。(由于容器历程是以container_runtime_t运行的)。可是可以通过准确使用命名空间的方法阻止此误差(不让宿主机的root映射到容器的命名空间中)。
上述内容只泛起在 Fedora 的“moby-engine”软件包中。其他的docker软件包以及 podman不会受到此误差的影响。由于他们的容器历程是以container_t运行的。
误差细节
攻击者可以将容器中的目的文件替换成指向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。
误差使用
误差POC已果真:https://github.com/q3k/cve-2019-5736-poc。
修复建议
更新 runC、LXC 至官方宣布的最新补丁。
参考链接
https://www.openwall.com/lists/oss-security/2019/02/11/2


京公网安备11010802024551号