微软Azure Service Fabric曝安全漏洞
2022-7-4 11:11:0 Author: www.4hou.com(查看原文) 阅读量:9 收藏

研究人员在微软Azure Service Fabric中发现一个安全漏洞——FabricScape。

Unit 42研究人员在微软Azure Service Fabric中发现一个安全漏洞——FabricScape,漏洞CVE编号为CVE-2022-30137,攻击者利用该漏洞可以实现Linux容器权限提升以获得节点root权限,进而入侵集群中的其他节点。该漏洞可以在配置了运行时访问的容器上实现利用,而该访问权限对容器是默认开启的。

Service Fabric是支持Azure云服务核心架构及其他微软服务(如Skype for Business、Intune、Azure事件中心、Azure数据工厂、Azure Cosmos DB、Azure SQL数据库、Dynamics 365和Cortana等)的基础技术。2018年,微软遵循MIT许可协议开放其源代码。微软数据显示,Service Fabric 有超过100万个应用。

Services powered by Service Fabric shown in the diagram include Azure Core Infrastructure, Azure Document DB, Intune, Skype for Business, Event Hubs, Bing Cortana, Azure SQL Database, Power BI, IoT Suite

图1 Service Fabric服务列表

Linux Fabric Node: Fabric Components - Fabric Gateway, Fabric RM, Fabric DCA, Fabric IS, Fabric CAS, File Store Service. These are shown in the diagram beside several Docker containers.

图2. Service Fabric Linux节点示例

CVE-2022-30137漏洞

Service Fabric支持以容器形式部署应用,在每个容器初始化时,会创建一个新的日志log目录,并挂载到每个容器上,同时拥有读写权限。其他目录都是中心化的,在每个节点上的目录。比如,Azure Service Fabric中这些目录位于/mnt/sfroot/log/Containers。

Service Fabric中有一个Data Collection Agent (DCA)组件,负责从其他目录收集日志。要访问这些目录,就需要很高的权限,因此是以root权限在每个节点上运行的。同时,还负责处理可以被容器修改的文件。因此,利用代理中文件处理机制的漏洞可以引发容器逃逸,并获得节点root权限。

研究人员深入分析DCA源码,发现GetIndex函数中一个可能的竞争条件任意写漏洞。该函数读取一个文件,检查文件内容是否是预设的格式,修改部分文件内容,并以新内容覆写该文件。为此,使用了2个子函数:

· LoadFromFile – 负责读取文件

· SaveToFile – 负责写新数据到文件中

Code shown begins with "internal bool GetIndex(TItem key, out int index)"

图3. GetIndex函数

该函数会引发symlink竞争。被入侵的容器中的攻击者可以替换LoadFromFile 读取的文件内容为恶意内容。在继续分析该文件时,攻击者就可以用一个到期望路径的symlink到覆写该文件,因此SaveToFile会根据symlink将恶意内容写入该路径。

CVE-2022-30137漏洞利用

为利用该漏洞,攻击者需要触发DCA在其控制的文件上执行有漏洞的函数。DCA会监控log目录中特定文件名的创建,并对每个文件执行不同的功能。其中一个文件是ProcessContainerLog.txt。

image.png 图4. ProcessContainerLog

DCA识别到该文件被创建后,会执行函数来在log目录中的路径上多次运行GetIndex,而这是容器可以修改。

image.png

图5. 监控 ProcessContainerLog

也就是说恶意容器可以在其控制的文件上触发GetIndex的执行,并尝试通过竞争条件来覆写节点文件系统上的路径。这种方式只能在Linux容器上利用,而不适用于Windows容器,因为在Windows容器中非特权用户无法创建symlinks。

获得节点执行权限

使用特权任意写漏洞实现代码执行有很多方法,包括添加恶意ssh key、添加恶意用户、安装后门等。但这些方法在这里都不适用,因为:

· GetIndex会修改内部Service Fabric文件,因此会验证该文件是否是正确的内部文件格式;

· 节点文件系统上被覆写的文件没有执行权限。

image.png

图6. 内部文件格式示例

研究人员分析发现该格式与包含环境变量的文件格式类似:

image.png图7. 恶意文件格式

研究人员选择使用/etc/environment进行漏洞利用,因为其中含有指定新shell基本环境变量的环境变量。而且Linux cron每个执行的作业都会导入该文件,因此,就可以注入恶意环境变量到以root权限运行的新进程中。

image.png图8.  cron job

为了实现代码执行,研究人员使用了动态链接劫持的方法,其中使用了LD_PRELOAD环境变量。在新进程初始化时,linker会加载变量指向的共享对象,因此,可以注入共享对象到节点上的特权cron 任务中。

漏洞利用流程如下:

· 利用该漏洞覆写主机上的/etc/environment;

· 使用新的cronjobs导入恶意环境变量;

· LD_PRELOAD加载恶意共享对象

· 主机root实现反向shell。

image.png

图9. 漏洞利用流程

漏洞时间轴

研究人员于2022年1月30日将该漏洞提交给了微软,委员于2022年6月14日修复了该漏洞。

本文翻译自:https://unit42.paloaltonetworks.com/fabricscape-cve-2022-30137/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/KELG
如有侵权请联系:admin#unsafe.sh