Open Containers社区披露了runC相关的漏洞,攻击者通过创建恶意Pod,利用符号链接以及条件竞争漏洞将宿主机目录挂载至容器中,最终可能导致容器逃逸问题。本文介绍该漏洞,以及该漏洞影响、影响范围和防范措施。

漏洞描述

对于K8s集群,攻击者将目标挂载路径设置为一个容器Volume在主机上的根目录的软链接(比如,emptyDir卷对应的软链接路径为/var/lib/kubelet/pods/$MY_POD_UID/volumes/kubernetes.io~empty-dir),以此来获取主机上的挂载点。由于挂载的源路径是攻击者可以控制的目录,攻击者可以将源路径中的子目录软链接到主机根目录上,并通过条件竞争TOCTTOU(Time Of Check To Time Of Use)的特定手段在一定条件让恶意容器中的指定目录挂载到主机的根目录。

CVE-2021-30465漏洞为高危漏洞,CVSS漏洞评分为7.6。更多信息,请参见官方公告

漏洞影响

当Pod中启动多个容器时,攻击者可以利用条件竞争,通过构造一个恶意Pod并挂载包含了软链接的目标路径,在特定条件下可以逃逸并获取容器rootfs之外的主机文件系统访问权限。

影响范围

runC小于等于1.0.0-rc94的版本均包含该漏洞。

该漏洞的修复版本为runC 1.0.0-rc95。更多信息,请参见runC v1.0.0-rc95

防范措施

手动升级Containerd至最新版本,关于Containerd的最新版本信息,请参见v1.0.0-rc95