release_agent exploit - Relative Paths to PIDs
要了解更多详细信息,请查看来自https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html的博客文章。这只是一个摘要:
该技术概述了一种从容器内部执行主机代码的方法,克服了存储驱动程序配置带来的挑战,这些配置会隐藏容器在主机上的文件系统路径,例如Kata Containers或特定的devicemapper
设置。
关键步骤:
定位进程ID(PIDs): 使用Linux伪文件系统中的
/proc/<pid>/root
符号链接,可以相对于主机的文件系统访问容器中的任何文件。这样可以绕过在主机上了解容器文件系统路径的需求。PID猜测: 采用暴力搜索方法在主机上搜索PID。这是通过顺序检查
/proc/<pid>/root/<file>
中特定文件的存在来完成的。当找到文件时,表示相应的PID属于运行在目标容器内部的进程。触发执行: 猜测的PID路径被写入
cgroups release_agent
文件。此操作触发release_agent
的执行。通过检查是否创建了输出文件来确认此步骤的成功。
利用过程
利用过程涉及一系列更详细的操作,旨在通过猜测运行在容器内部的进程的正确PID,在主机上执行有效载荷。以下是操作步骤:
初始化环境: 在主机上准备一个有效载荷脚本(
payload.sh
),并为cgroup操作创建一个唯一目录。准备有效载荷: 编写包含要在主机上执行的命令的有效载荷脚本,并使其可执行。
设置Cgroup: 挂载和配置cgroup。设置
notify_on_release
标志以确保在释放cgroup时执行有效载荷。暴力破解PID: 循环遍历潜在的PID,将每个猜测的PID写入
release_agent
文件。这实际上将有效载荷脚本设置为release_agent
。触发和检查执行: 对于每个PID,将cgroup的
cgroup.procs
写入,如果PID正确,则触发release_agent
的执行。循环将继续,直到找到有效载荷脚本的输出,表示成功执行。
博客文章中的PoC:
最后更新于