一、漏洞概述
近日,绿盟科技CERT监测到runc官方发布安全通告,修复了一个容器逃逸漏洞(CVE-2024-21626),由于runc在初始化时存在内部文件描述符泄露,且未验证最终工作目录是否位于容器的挂载命名空间,导致攻击者可以通过多种方式进行容器逃逸:
1、由于runc 内部将宿主机 /sys/fs/cgroup句柄在内的部分文件描述符泄漏到runc init中,如果容器配置为已设置process.cwd,当具有特权的用户执行恶意容器镜像,则生成的pid1进程将在宿主机挂载命名空间中拥有一个工作目录,导致生成的进程可以访问整个宿主文件系统。
2、由于runc exec中也存在文件描述符泄漏和缺乏工作目录验证,如果容器内的恶意进程知道某个管理进程将使用 –cwd 参数和给定路径调用 runc exec,便可以用符号链接将该路径替换为 /proc/self/fd/7/ 。一旦容器进程执行了容器镜像中的二进制文件,可以绕过PR_SET_DUMPABLE 保护,导致攻击者可以通过打开 /proc/$exec_pid/cwd 来访问主机文件系统。
3、攻击1、2可以通过将类似/proc/self/fd/7/../../../bin/bash的路径用作process.args二进制参数来覆盖主机二进制文件。由于可以覆盖类似 /bin/bash的二进制文件,一旦特权用户在主机上执行目标二进制文件,攻击者就可以获得对主机的完全访问权限。
runc 是一个 CLI 工具,用于根据 OCI 规范在 Linux 上生成和运行容器。runC默认运行于Docker、containerd, Podman, and CRI-O等容器,应用范围广泛,支持多种容器格式,可不通过docker引擎直接运行容器。
参考链接:
https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv
二、影响范围
受影响版本
- 0.0-rc93 <= runc <= 1.1.11
不受影响版本
- runc >= 1.1.12
三、漏洞防护
- 官方升级
目前官方已在最新版本中修复了该漏洞,请受影响的用户尽快升级版本进行防护,官方下载链接: https://github.com/opencontainers/runc/releases
声明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。
绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。