此仓库包含一个易受 CVE-2024-21626 攻击的应用程序代码示例,以及一个用于检测利用尝试的 eBPF gadget。
该仓库是作为此博客文章的一部分创建的。
用于检测此漏洞的 gadget 程序仅供演示之用。它并非对 CVE-2024-21626 的完整检测。
CVE-2024-21626 是 runc 容器运行时中的一个漏洞,存在于 v1.1.12 之前的版本。它利用 runc 在容器内创建或执行命令时未能及时关闭"泄漏"的文件描述符,导致容器继承了该文件描述符,从而获得对主机文件系统的访问权限。
有多种方式可以利用此漏洞。此仓库演示了如何在运行时利用此漏洞。
你可以在此处阅读更多信息。
要使此演示正常工作,你需要确保机器上运行的 runc 版本 <= 1.1.11。
leaky-app 是一个 Go 应用程序,它会创建一个指向可能泄漏的文件描述符的符号链接。要构建 Docker 镜像:
make leaky-app
要构建 eBPF gadget,你需要 [ig] 工具。
你可以使用以下命令构建 gadget:
make gadget
两者都构建完成后,使用以下命令运行 gadget:
IG_EXPERIMENTAL=true sudo -E ig run trace-symlink:latest
打开另一个 shell 并启动 leaky-app 容器:
docker run --rm --name leaky-app leaky-app
你应该会看到 gadget 输出调用了符号链接系统调用的容器。
此仓库包含一个演示应用程序,旨在展示对 CVE-2024-21626 的检测。 需要注意的是,此演示仅用于教育目的,不应被视为实用的检测工具。 此演示中实现的检测机制并未涵盖所有场景,也无法准确反映检测此漏洞的复杂性。