CVE-2021-30465

漏洞描述

Runc 是一个CLI工具,用于根据OCI规范生成和运行容器,该工具被广泛的应用于各种容器环境中,如Kubernetes。此次漏洞触发条件为攻击者将目标挂载路径设置为一个容器Volume在主机上目录的软链接,以此来获取主机上的挂载点。由于挂载的源路径是攻击者可以控制的目录,攻击者可以将源路径中的子目录软链接到主机根目录上,并通过条件竞争TOCTTOU(Time Of Check To Time Of Use)的特定手段在一定条件让恶意容器中的指定目录挂载到主机目录。

影响版本

Docker 20.10.7 以下版本
Containerd 1.4.6, 1.5.2以下版本
Runc 1.0-rc95 以下版本
目前UK8S节点使用的默认Docker及Containerd版本均在影响范围内

漏洞自查

您可以采用以下任意一种方式确认节点使用的运行时版本。
1、直接执行kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.containerRuntimeVersion}{"\n"}{end}'
2、登录节点,对于Docker节点,执行docker version。对于Containerd节点,执行crictl version

⚠️ 2020年7月9日之前创建的集群,Master节点默认不加入节点,可以跳过Master节点检查。

修复建议

1、确认业务部署方式,使用受信的容器,并且在容器挂载目录中,不存在主机内其它路径的软链接。
2、自2022年1月14日起,1.17及以上版本的集群,新增节点及新建集群均会默认采用修复版本的Docker及Containerd。
3、由于兼容性问题,1.17以下集群版本已经不再维护,建议您尽快升级到1.17及以上的版本,或者通过检查业务部署,避免该漏洞。
4、1.17及以上版本集群的旧节点,您可以通过添加新节点,驱逐旧节点Pod,删除旧节点的方式进行升级。请您务必确认Pod在新节点运行正常后,再删除旧节点。
5、由于Master节点无法通过增删节点的方式进行升级,请按照手动升级方案进行升级。

手动升级方案

  1. 请按照漏洞自查步骤,检查节点是否需要升级。
  2. 执行 kubectl drain --ignore-daemonsets <node> 驱逐节点上所有pod,手动驱逐Pod。某些情况下,有可能需要增加--delete-emptydir-data参数。等待Pod驱逐完成后,执行后续升级操作。
  3. 按照本文升级Docker及Containerd小节,根据您的节点类型及节点运行时是Docker还是Containerd。选择对应的升级方式进行操作。
  4. 对于Docker节点 执行docker version。对于Containerd节点,执行crictl version,确认当前节点运行时版本号。
  5. 【可选】对于工作节点,而非Master节点,等待升级完成后,可以执行kubectl uncordon <node>,将节点重新加入集群。

升级Docker及Containerd

⚠️ 如果您错误地在Containerd节点上安装Docker,将导致节点不可用。

Centos7

Docker节点
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-rootless-extras-20.10.11-3.el7.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-20.10.11-3.el7.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.12-3.1.el7.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-20.10.11-3.el7.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-scan-plugin-0.9.0-3.el7.x86_64.rpm
yum install -y fuse-overlayfs slirp4netns
rpm -U containerd.io-1.4.12-3.1.el7.x86_64.rpm  docker-ce-20.10.11-3.el7.x86_64.rpm docker-ce-rootless-extras-20.10.11-3.el7.x86_64.rpm   docker-scan-plugin-0.9.0-3.el7.x86_64.rpm  docker-ce-cli-20.10.11-3.el7.x86_64.rpm
Containerd节点
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.12-3.1.el7.x86_64.rpm
rpm -U containerd.io-1.4.12-3.1.el7.x86_64.rpm

Ubuntu 20.04

Docker节点
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce_20.10.11~3-0~ubuntu-focal_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.4.12-1_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce-cli_20.10.11~3-0~ubuntu-focal_amd64.deb
dpkg -i docker-ce_20.10.11~3-0~ubuntu-focal_amd64.deb containerd.io_1.4.12-1_amd64.deb docker-ce-cli_20.10.11~3-0~ubuntu-focal_amd64.deb
Containerd节点
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.4.12-1_amd64.deb
dpkg -i containerd.io_1.4.12-1_amd64.deb

Ubuntu 18.04

Docker节点
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_20.10.11~3-0~ubuntu-bionic_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/containerd.io_1.4.12-1_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce-cli_20.10.11~3-0~ubuntu-bionic_amd64.deb
dpkg -i docker-ce_20.10.11~3-0~ubuntu-bionic_amd64.deb  containerd.io_1.4.12-1_amd64.deb  docker-ce-cli_20.10.11~3-0~ubuntu-bionic_amd64.deb
Containerd节点
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/containerd.io_1.4.12-1_amd64.deb
dpkg -i containerd.io_1.4.12-1_amd64.deb

漏洞原型链接

1、https://github.com/opencontainers/runc/security/advisories/GHSA-c3xm-pvg7-gh7r

最近更新时间:2025-03-19 09:32:08