Kubernetes GO函数库漏洞可引发DoS攻击

研究人员发现,Kubernetes的Go函数库一项重大漏洞,可能导致容器遭到拒绝服务(denial of service,DoS)攻击。

Palo Alto公司的Unit42研究人员Aviv Sasson是在K8s运行的一个名为container/storage的Go函数库中,发现安全漏洞CVE-2021-20291。这个漏洞可以在存储库(registry)上传恶意镜像文件时触发,即当用户从registry拉取这个镜像文件时,造成对CRI-O及Podman两个容器引擎的DoS攻击。

研究人员解释,拉取容器镜像文件第一步是下载其宣言(manifest)。宣言是一个包含创建镜像文件方法指示的文件,内容包含镜像文件操作系统、CPU架构,或是映像层数组(layer array),后者是说明组成容器文件系统的各层的清单。当用户从存储库拉取映像时,容器引擎会读取这个清单,并下载、解压缩每一层。

攻击者可以将其中一层恶意层上传到存储库中,然后上传使用好几层、包含这个恶意层的镜像文件。等受害者拉取该镜像文件时,就能造成恶意层下载到Kubernetes中,进而开采Go函数库漏洞。经由这个漏洞,黑客就可以危及所有依赖这些容器引擎的容器基础架构,包括Kubernetes和Red Hat OpenShift。

这漏洞影响层面相当大,因为从Kubernetes 1.20版起,Docker就退役了,唯一的容器引擎是CRI-O及Containerd,这会让许多使用CRI-O的集群曝险。攻击者可能将恶意镜像文件下载到多个不同节点,让它们同时挂点,使它们除了重启节点外无从修补问题。

研究人员于今年3月10日向container/storage维护单位通报,现在container/storage 1.28.1版(rs/storage/releases/tag/v1.28.1)已经修补漏洞。此外,相关容器引擎也同时发布修补好的CRI-O 1.20.2及Podman 3.1.0版。

上个月同一名研究人员也公布Docker Hub上下载总数超过2千万次的30个镜像文件内置挖矿程序。