Docker release_agent cgroups escape
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
有关更多详细信息,请参阅 原始博客文章. 这只是一个摘要:
原始 PoC:
概念验证(PoC)演示了一种通过创建 release_agent
文件并触发其调用在容器主机上执行任意命令的方式来利用 cgroups。以下是涉及的步骤细分:
准备环境:
创建一个目录 /tmp/cgrp
作为 cgroup 的挂载点。
将 RDMA cgroup 控制器挂载到该目录。如果 RDMA 控制器不存在,建议使用 memory
cgroup 控制器作为替代。
设置子 Cgroup:
在挂载的 cgroup 目录中创建一个名为 "x" 的子 cgroup。
通过向其 notify_on_release 文件写入 1 来启用 "x" cgroup 的通知。
配置释放代理:
从 /etc/mtab 文件中获取主机上容器的路径。
然后将 cgroup 的 release_agent 文件配置为执行位于获取的主机路径上的名为 /cmd 的脚本。
创建和配置 /cmd 脚本:
/cmd 脚本在容器内创建,并配置为执行 ps aux,将输出重定向到容器中的一个名为 /output 的文件。指定了主机上 /output 的完整路径。
触发攻击:
在 "x" 子 cgroup 中启动一个进程,并立即终止。
这会触发 release_agent
(/cmd 脚本),该脚本在主机上执行 ps aux 并将输出写入容器中的 /output。
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)