type
status
date
slug
summary
tags
category
icon
password
环境: runc <=1.1.11
攻击细节原理:
在 runc 受影响版本中,由于在初始化过程中泄露了部分内部文件描述符,包括对宿主的 /sys/fs/cgroup 的句柄,同时 runc 未验证最终工作目录是否位于容器的挂载命名空间。攻击者可以修改 process.cwd 配置为 /proc/self/fd/7或者将宿主机调用runc exec时--cwd参数中传入的特定路径替换为/proc/self/fd/7/符号链接,进而让容器内的进程能够访问和操作宿主机的文件系统,从而绕过了容器的隔离机制。
更多细节(gif图片):
- 攻击者使用自制的docker-poc包进行攻击利用 CVE-2024-21626 runc process.cwd 和泄露的 fds 容器突破 |斯尼克 (snyk.io)
- 该docker-image尚未在公网开源
实际的 fd 可能根据文件打开顺序而改变 可以使用以下脚本爆破使用
本地测试成功:
fd/9 实现 runc-version: 1.1.10 1.1.2
runc --version 为1.0.0时 漏洞难以实现
runc --version 为1.1.4时 fd/8实现
今天刚出的洞
下面讲一下更多细节
可以有以下方法复现
- runc - input 手动断点编译
- ebpf监听runc打断点
- runc create demo
runc exec demo ls /proc/1/fd -a 可以直接看到对应的符号链接
- docker run -w /proc/1/fd/0-10 ubuntu cat ../../../../../etc/passwd 爆