攻击者可借助开源 runc 容器运行时引擎的安全漏洞(被 Docker 等使用)来获取对主机机器的控制权。
译自 Leaky Vessels Vulnerability Sinks Container Security,作者 Joab Jackson 是 The New Stack 的高级编辑,负责报道云原生计算和系统运维。他已经报道了超过25年的 IT基础设施和开发相关信息,曾在 IDG 和 Government Computer News 任职。
研究人员发现了开源 runc 容器引擎中的一个漏洞,足够大,使攻击者能够轻松穿越并进入底层主机操作系统,从而对您的系统造成各种危害。
安全公司 Snyk 在周三的博客中建议:“攻击者可以利用 [此漏洞] 从容器内部未经授权地访问底层主机操作系统。” 此漏洞以及一系列其他漏洞被他们称为 “Leaky Vessels”。
runc 命令行界面的维护者首先确定了原始问题 —— 一个泄漏的文件描述符,并迅速发布了更新,runc v1.12,修复了核心问题(在 CVE-2024-21626 中描述)。
然而,在所有人都升级之前,使用 Docker、Kubernetes 和基于云的容器服务等工具的用户应该密切关注供应商发布的补丁,Snyk 建议。
Docker 等工具使用 runc 作为其默认容器运行时引擎。Docker 最初创建了 runc,然后将其传承给开放容器倡议组织,以作为供应商中立的开源项目进行维护。
周三,Docker 迅速发布了 runc 的补丁,以及在开源 Moby Docker 引擎和 BuildKit 中发现的相关漏洞。
GitHub 将此漏洞评级为 8.6,在 CVSS 评级标准上为 “高危级别”,意味着该漏洞可能导致显著的停机和/或数据丢失,尽管难以利用。Docker 指出,它还可以用于污染构建缓存的完整性。
Snyk 的研究人员报告称,迄今为止,在全球范围内尚未发现利用这个漏洞的任何攻击。
具有这样漏洞的情况下,攻击者可以访问并接管底层操作系统。从那里,他们可以访问系统上的其他数据(例如凭据),并发起进一步的攻击。
“随着容器化技术在开发和生产环境中的广泛应用,这类攻击对数据完整性、机密性和系统稳定性构成重大风险,” Red Hat 在周四的公告中指出。
系统可能受到影响,要么通过运行受攻击代码污染的镜像,要么通过使用恶意 Dockerfile 或上游镜像构建容器。
“只有当用户通过将恶意内容纳入构建过程或从可疑镜像运行容器时,这些漏洞才能被利用,” Docker 高级安全工程师 Gabriela Georgieva 在周三的博客文章中写道。
“我们强烈建议所有客户通过及时应用这些更新来优先考虑安全性。及时应用这些更新是保护系统免受这些漏洞影响并维护安全可靠的 Docker 环境的最有效措施。”
Red Hat 建议使用 Run 和 WORKDIR 指令检查 Dockerfile,以确保没有逃逸或恶意路径。对于支持 eBPF 的 Linux 内核,Snyk 发布了一个用于检测该漏洞的工具,称为 leaky-vessels-runtime-detector。
Snyk 报告了 BuildKit 中的三个与 runc 紧密相关的漏洞。所有这些漏洞都被评为高危级别:
- CVE-2024-23651: Buildkit Mount Cache Race
- CVE-2024-23653: Buildkit GRPC SecurityMode Privilege Check
- CVE-2024-23652: Buildkit Build-time Container Teardown Arbitrary Delete
runc 引擎是 “较低级别的容器运行时之一,因此用户通常不直接与 runc 交互,而是通过顶层的其他抽象进行交互,然后使用 runc 执行命令,” Kubernetes 安全公司 KSOC 的首席技术官兼联合创始人 Jimmy Mesta 在一篇博客文章中解释道。“runc 与其他软件(如 BuildKit)一起工作,完成诸如解压图像层和启动容器进程、将文件系统放置到适当位置以及在删除容器后清理这些进程和文件等活动。在容器运行时中,BuildKit 将是构建图像的工具,而 runC 则执行每个步骤的实际操作。”
这并不是 runc 第一次受到意外逃逸通道的困扰。在2019年,TNS 报道了由波兰研究人员发现的 Runcescape(CVE-2019-5736),当时他们正在调查基于命名空间的沙箱。