研究人员在微软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万个应用。
图1 Service Fabric服务列表
图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 – 负责写新数据到文件中
图3. GetIndex函数
该函数会引发symlink竞争。被入侵的容器中的攻击者可以替换LoadFromFile 读取的文件内容为恶意内容。在继续分析该文件时,攻击者就可以用一个到期望路径的symlink到覆写该文件,因此SaveToFile会根据symlink将恶意内容写入该路径。
CVE-2022-30137漏洞利用
为利用该漏洞,攻击者需要触发DCA在其控制的文件上执行有漏洞的函数。DCA会监控log目录中特定文件名的创建,并对每个文件执行不同的功能。其中一个文件是ProcessContainerLog.txt。
图4. ProcessContainerLog
DCA识别到该文件被创建后,会执行函数来在log目录中的路径上多次运行GetIndex,而这是容器可以修改。
图5. 监控 ProcessContainerLog
也就是说恶意容器可以在其控制的文件上触发GetIndex的执行,并尝试通过竞争条件来覆写节点文件系统上的路径。这种方式只能在Linux容器上利用,而不适用于Windows容器,因为在Windows容器中非特权用户无法创建symlinks。
获得节点执行权限
使用特权任意写漏洞实现代码执行有很多方法,包括添加恶意ssh key、添加恶意用户、安装后门等。但这些方法在这里都不适用,因为:
· GetIndex会修改内部Service Fabric文件,因此会验证该文件是否是正确的内部文件格式;
· 节点文件系统上被覆写的文件没有执行权限。
图6. 内部文件格式示例
研究人员分析发现该格式与包含环境变量的文件格式类似:
图7. 恶意文件格式
研究人员选择使用/etc/environment进行漏洞利用,因为其中含有指定新shell基本环境变量的环境变量。而且Linux cron每个执行的作业都会导入该文件,因此,就可以注入恶意环境变量到以root权限运行的新进程中。
图8. cron job
为了实现代码执行,研究人员使用了动态链接劫持的方法,其中使用了LD_PRELOAD环境变量。在新进程初始化时,linker会加载变量指向的共享对象,因此,可以注入共享对象到节点上的特权cron 任务中。
漏洞利用流程如下:
· 利用该漏洞覆写主机上的/etc/environment;
· 使用新的cronjobs导入恶意环境变量;
· LD_PRELOAD加载恶意共享对象
· 主机root实现反向shell。
图9. 漏洞利用流程
漏洞时间轴
研究人员于2022年1月30日将该漏洞提交给了微软,委员于2022年6月14日修复了该漏洞。
本文翻译自:https://unit42.paloaltonetworks.com/fabricscape-cve-2022-30137/如若转载,请注明原文地址