CD's second night

CVE-2024-21626

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图片):
notion image
  1. 攻击者使用自制的docker-poc包进行攻击利用 CVE-2024-21626 runc process.cwd 和泄露的 fds 容器突破 |斯尼克 (snyk.io)
  1. 该docker-image尚未在公网开源
  1. 官方源码修改逻辑: Merge pull request from GHSA-xr7r-f8xq-vfvv · opencontainers/runc@0212048 (github.com)
  1. Runc 容易受到 Process.CWD 诡计和泄露的 FDS 的容器突破 ·CVE-2024-21626 ·GitHub 咨询数据库
实际的 fd 可能根据文件打开顺序而改变 可以使用以下脚本爆破使用
本地测试成功:
fd/9 实现 runc-version: 1.1.10 1.1.2
notion image
runc --version 为1.0.0时 漏洞难以实现
notion image
runc --version 为1.1.4时 fd/8实现
notion image
今天刚出的洞
下面讲一下更多细节
可以有以下方法复现
  1. runc - input 手动断点编译
  1. ebpf监听runc打断点
  1. runc create demo
runc exec demo ls /proc/1/fd -a 可以直接看到对应的符号链接
  1. docker run -w /proc/1/fd/0-10 ubuntu cat ../../../../../etc/passwd 爆
Loading...