近日,安易科技安全团队监测到 runc 官方发布安全通告,修复了一个容器逃逸漏洞(CVE-2024-21626),由于 runc 在初始化时存在内部文件描述符泄露,且未验证最终工作目录是否位于容器的挂载命名空间,导致攻击者可以通过多种方式进行容器逃逸。
漏洞披露后,安易科技安全团队迅速响应,对该漏洞进行深入分析与研判。并通过安易容器安全平台实现了对漏洞扫描与漏洞利用检测,帮助用户快速识别安全风险,确认防御措施的有效性。
影响组件 runc是一个根据OCI规范,在Linux上生成和运行容器的命令行工具。runc作为容器运行时的重要支撑组件,使用非常灵活广泛,可以与各种容器工具和平台集成,如Docker、Kubernetes等。该漏洞几乎影响runc的所有历史版本,范围很广。它支持多种容器格式,包括OCI规范定义的标准格式,以及其他格式如Docker镜像格式。作为开源项目,runc受到全球开发者社区的广泛参与和贡献,被广泛应用于生产环境中的容器化部署。
漏洞描述 由于runc存在内部文件描述符泄露,本地攻击者可以通过多种方式进行容器逃逸: 1.由于runc 内部意外地将包括宿主机 /sys/fs/cgroup 句柄的几个文件描述符泄漏到 runc init 中,攻击欺骗具有特权的用户执行恶意容器镜像,可以导致pid1 进程将在宿主机挂载命名空间中拥有一个工作目录,生成的进程可以访问整个宿主文件系统。
2.由于runc exec中同样存在文件描述符泄漏和工作目录验证不足。如果容器内的恶意进程知道某个管理进程将使用 --cwd 参数和给定路径调用 runc exec,便可以用符号链接将该路径替换为 /proc/self/fd/7/ 。一旦容器进程执行了容器镜像中的可执行文件,可以绕过PR_SET_DUMPABLE 保护,之后攻击者可以通过打开 /proc/$exec_pid/cwd 来访问主机文件系统。
3.可以通过将类似 /proc/self/fd/7/../../../bin/bash的路径用作 process.args 二进制参数来覆盖主机二进制文件来改进攻击1、2。由于可以覆盖类似 /bin/bash的二进制文件,一旦特权用户在主机上执行目标二进制文件,攻击者就可以进行转移,以完全访问主机。
v1.0.0-rc93 <= runc <= 1.1.11
漏洞复现环境,内核:5.8.0-33-generic,docker Server Version:20.10.17,runc Version 1.1.2
方案一:容器运行时入侵检测 安装部署安易科技自主研发的AneSec云原生安全平台最新版本产品。该产品已默认内置了针对“检测到runc容器逃逸漏洞(CVE-2024-21626)利用行为”的规则,无需额外配置。 完成安装后,产品将自动启动并实时监控容器运行时的行为。一旦检测到任何与CVE-2024-21626漏洞利用行为相符的异常活动,系统将立即发出警报,如下图所示:
方案二:恶意镜像检测方案 通过镜像的层文件信息查找是否设置了”WORKDIR /proc/self/fd/x“的镜像,如果层文件信息中包含该段文字,则其大概率为恶意镜像,如下图所示: 参考链接: https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv https://buaq.net/go-219732.html https://github.com/Wall1e/CVE-2024-21626-POC/tree/main
原文始发于微信公众号(安易科技AneSec):runc容器逃逸漏洞,安易科技提供解决方案
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论