紧急通告!runc容器逃逸漏洞(CVE-2024-21626)曝光,数百万容器亟待修复!
发布时间:
2024-02-02 18:47
01 漏洞概述
02 漏洞描述
在 runc 1.1.11 及更早版本中,由于内部文件描述符泄漏,攻击者可以使新启动的容器进程(通过 runc exec)在主机文件系统命名空间中拥有工作目录,这允许通过访问主机文件系统实现容器逃逸。同样的攻击可以被恶意镜像用来通过 runc run 让容器进程访问主机文件系统。同时可以覆盖任意主机二进制文件,实现完全的容器逃逸。
03 攻击方式描述
1、工作目录配置不当:恶意容器通过将其工作目录设置为特定的文件描述符路径,利用 runc 内部文件描述符泄漏,获得对主机文件系统的访问权限。这种方式的关键在于错误配置的 process.cwd,使得容器内的进程可以访问到主机的文件系统,从而执行任意代码或修改系统文件。
2、runc exec:攻击者在容器内部使用 runc exec 命令,配合 --cwd 参数和符号链接,实现对主机文件系统的访问。这个攻击依赖于 runc 对工作目录验证不足,允许通过指向内部泄露的文件描述符的符号链接,来更改 runc exec 的工作目录到主机文件系统上的任意位置。
04 解决方案
1、针对上述漏洞,runc 1.1.12 版本增加多项安全补丁:
-
工作目录验证:增加了对工作目录是否在容器内部的验证,如果检测到工作目录在容器外,runc 将阻止容器进程的执行。
-
关闭内部文件描述符:在 runc init 的最终阶段关闭所有内部文件描述符,确保它们不能被后续的容器进程利用。
-
修复文件描述符泄漏:针对已识别的泄漏进行了修复,特别是将 /sys/fs/cgroup 标记为 O_CLOEXEC,并回溯修复了一些 *os.File 泄漏。
-
强化文件描述符处理:在执行 runc init 之前,将所有非标准输入/输出文件标记为 O_CLOEXEC,防止未来可能的文件描述符泄漏。
2、影响版本
v1.0.0-rc93 <= runc <= 1.1.11
3、其他受影响组件
Docker、k8s等使用runc的容器应用。
4、安全更新
目前官方已有可更新版本,建议受影响用户参考以下链接升级至最新版本:runc >= 1.1.12,https://github.com/opencontainers/runc/releases/tag/v1.1.1205。
05 产品解决方案
该漏洞目前已经可以通过镜界容器安全平台来实施检测,可在平台管理-软件升级-离线升级内上传检测插件 。
在集群安全-插件管理内选择CVE-2024-21626插件并配置扫描范围,之后点击保存并运行。
运行结果如图所示,检测出当前环境存在该漏洞。
如需获取检测插件,请联系厂商技术人员。
上一页
上一页