Runc CVE-2019-5736主机中的漏洞

注意事项 佩雷夫 :昨晚,SUSE Linux的高级容器工程师Aleksa Sarai向oss-sec邮件列表透露了一个严重的runc / LXC安全漏洞,该漏洞可能允许攻击者访问隔离的容器来获得主机系统的root特权。 由于该问题已在容器运行时的参考实现(runc)中找到,因此它影响了许多容器系统,包括Docker / Moby, Podmancri-o (以及Kubernetes本身)。 下面以将工程师的消息翻译为邮件列表的形式介绍了详细信息。


我是runc维护者之一(Docker,cri-o,contained,Kubernetes等使用的基础容器运行时)。 最近,它变得众所周知,我们已经检查并修补了该漏洞。

发现此漏洞的研究人员:

  • 亚当·伊瓦努克(Adam Iwaniuk);
  • 鲍里斯·波夫斯基(BorysPopławski)。

此外,Aleksa Sarai(即,我)发现LXC也受到此漏洞的更复杂版本的影响。

简短评论


该漏洞允许恶意容器(最少的用户交互)覆盖runc主机二进制文件,从而能够在主机上以root特权执行代码。 用户交互的程度使得您可以在以下任何一种情况下以容器内的root用户特权运行任何命令(攻击者是否控制命令都没有关系):

  • 根据攻击者控制的映像创建新容器;
  • 连接( docker exec )到攻击者先前对其具有写访问权的现有容器。

Fedora *中的默认AppArmor策略或SELinux默认策略都不会阻止此漏洞(因为容器进程看起来像是从container_runtime_t开始)。 但是,它被正确使用用户名称空间(主机的根未映射到容器的用户名称空间) 阻止

CVSSv3向量(评级为7.2)如下:

AV:L/AC:H/PR:L/UI:R/S:C/C:N/I:H/A:H

问题分配给CVE-2019-5736

*该问题仅适用于Fedora中的moby-engine软件包。 podman这样的podman软件包受到保护,无法运行,因为它以container_t的身份启动容器进程。

补丁


我正在应用适当的修补程序来解决此问题( 0001-nsenter-clone-proc-self-exe-to-avoid-exposing-host-b.patch )。 它基于HEAD分支,尽管libcontainer/nsenter/的代码很少更改,以致该补丁很可能适用于您正在处理的几乎任何旧版本的runc代码库。

请注意,我推送到runc master分支的补丁程序是该补丁程序的修改版本,尽管它们在功能上是相同的(如果尚未使用随附的补丁程序来修补文件,我们建议使用上游版本)。

二次利用代码


一些供应商要求使用漏洞利用代码以确保补丁可以解决问题。 由于问题非常严重(尤其是对于公共云供应商),我们决定提供这样的代码。 我编写的漏洞利用代码比研究人员提供的原始代码更具通用性,并且适用于LXC(它不需要进行强大的修改即可应用于其他易受攻击的可执行环境)。 README中提供了有关如何使用漏洞利用代码的详细信息。

根据OpenWall规则,漏洞利用代码将在CRD之后的7天(即2019年2月18日) 公开发布。 如果您有容器运行时,请确保它不受此漏洞影响。

对其他项目的影响


应当指出,在对该问题进行进一步调查时,我发现LXC具有类似的漏洞,并且它们已经推挤了我们联合开发的类似补丁 。 LXC有点难以操作,但问题本身是相同的。

与systemd-nspawn的代表进行的讨论得出的结论是,它们不容易受到攻击(因为它们使用不同的方法连接到LXC和runc的容器)。

Apache Mesos的代表也与我联系,报告他们也容易受到攻击(我认为他们只是使用了将要发布的漏洞利用代码)。 如果大多数容器运行时以前未采取非常不寻常的步骤来减轻其潜在影响,则很可能会受到攻击。

其他新闻


我们已经为将来的安全漏洞建立了新闻通讯: 此处介绍了加入新闻通讯的过程(它基于Kubernetes安全公告邮件列表)。 如果您为依赖于runc(或其他OCI项目)的容器分发任何运行时,请加入。

PS来自翻译


流行的Linux发行版本的跟踪器中的CVE-2019-5736问题:


...以及Kubernetes博客文章 (请查看“我该怎么办?”部分)。

Source: https://habr.com/ru/post/zh-CN439964/


All Articles