本文为译文,原文链接:https://www.wiz.io/blog/omi-returns-lpe-technical-analysis
作为2022年6月补丁星期二的一部分,微软发布了一个补丁,以修复开放管理基础设施(OMI)中新的权限提升漏洞CVE-2022-29149,CVSS得分为7.8(允许本地权限提升的漏洞的最高得分)。OMI是Azure使用的云中间件软件,通常安装在Linux虚拟机上,没有明确的客户通知,就像大多数其他云代理一样。这是已知影响OMI的第五个漏洞。Wiz Research在2021年6月发现并报告了前四个漏洞,包括一个被称为“OMIGOD”的未经身份验证的远程代码执行漏洞(CVE-2021-38647)。
OMI由多个流行的Azure服务自动安装,通常作为OMS代理(运营管理套件)的一部分。虽然微软记录了它,但客户可能仍然没有意识到它的存在。这种缺乏意识可能导致补救率降低,因为客户没有解决相关风险或进行必要的更新。我们已经验证了CVE-2022-29149是可利用的,并与Azure合作,以改善此类问题的补丁和客户通知流程。我们感谢微软富有成效的合作,导致OMI依赖代理(Azure的运营管理套件代理、所需状态配置代理和Azure诊断代理)加入Azure的扩展自动更新功能。
在这篇文章中,我们根据自己的研究分享了有关漏洞的技术细节,并提供检测和补救说明。此外,我们回顾了云中间件问题,并解释了为什么它会让云客户面临风险。
谁有风险?
这个最新的漏洞影响了每个版本的OMI,早于1.6.9-1。根据微软的建议,以下服务目前不支持自动更新,这意味着除非更新,否则使用这些服务部署在Azure中的Linux虚拟机仍然易受攻击:
- OMI作为独立软件包
- 系统中心运营经理(SCOM)
- Azure自动化
- Azure自动更新
- Azure运营管理套件(OMS)
- Azure日志分析
- Azure诊断
- Azure HDInsight
- Azure容器监控解决方案
- Azure安全中心
- Azure Sentinel
什么是云中间件?
当客户加入服务时,云中间件软件通常由 CSP 静默安装。此外,云中间件通常以高权限运行。这种缺乏客户意识和高权限访问的组合可能会在漏洞的情况下暴露客户环境。这种性质的软件增加了云环境的攻击面,可能使客户暴露于本地权限提升和远程代码执行漏洞。当前的责任共担模型没有明确定义谁负责保护云中间件,因此客户经常无法解决相关风险,即使在漏洞被披露和修补后,他们的环境和数据也容易受到攻击。
要了解有关云中间件及其对云客户安全态势的影响的更多信息,您可以阅读我们关于该主题的最新博客文章。
什么是OMI?
Azure中云中间件软件的一个显著例子是OMI,它是Open Management Infrastructure 的缩写。这是一个由微软与The Open Group合作赞助的开源项目。本质上,它是UNIX/Linux系统的Windows管理基础设施(WMI)。OMI允许您收集统计数据并同步整个环境的配置。由于OMI提供的易用性和抽象性,它位于许多Azure服务的幕后,包括开放管理套件(OMS)、Azure Insights、Azure自动化等。
技术细节
微软向OMI引入了一个大补丁,涉及多个文件的多个更改,这告诉我们修复此漏洞不是一项简单的任务。在审查这些更改时,我们观察到补丁包括OMI各个组件之间内部通信协议的重大设计更改。首先,开发人员删除了secretString
机制,该机制以前用于验证一些最关键的内部通信——那么为什么OMI的开发人员决定取消它呢?
图1:OMI secretString机制去除
被随机性愚弄
secretString
是一个随机生成的密码,用于保护OMI几个组件之间的通信,并验证来自高权限OMI进程的消息。您可以参考我们OMIGOD出版物中的附录,以了解我们如何能够操纵OMI,在OMI没有此secretString
机制的情况下将我们的权限提升到根部。
当OMI进程启动时,secretString
是随机生成的。但它有多随机?让我们回顾一下生成“随机”secretString的方法:
int GenerateRandomString(char *buffer, int bufLen)
{
const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
time_t t;
int i;
unsigned int availableLetters = sizeof(letters) - 1;
srand((unsigned) time(&t)); // <--- (1)
for (i = 0; i < bufLen - 1; ++i)
{
buffer[i] = letters[rand() % availableLetters];
}
buffer[bufLen - 1] = '\0';
return 0;
}
(1)表明当前系统时间是随机生成的字符串的种子。由于OMI在启动时生成secretString
,因此可以揭示种子,因为我们可以找到OMI流程已经运行了多长时间。了解secretString
种子,我们可以预测secretString
并伪造消息,就好像它们来自高权限的OMI进程一样:通过将上述代码片段中time
方法(1)替换为OMI进程的实际启动时间,我们可以恢复secretString
。
我知道你的secret
这个secret打开了什么可能性?显然,我们可以使用恢复的secretString
绕过微软引入的补丁,以解决CVE-2021-38645(我们在2021年6月披露的LPE漏洞之一),并将我们的权限提升到root。
图2:CVE-2022-29149开发
检测和修复
在我们与微软就该问题进行合作后,微软将OMS、LAD和DSC安装到自动扩展升级功能。有了这个功能,一旦引入新版本,这些代理(因此还有与它们捆绑在一起的OMI)就可以更新。我们加入微软的建议,敦促客户为OMS、LAD和DSC代理启用自动更新,并鼓励客户迁移到不依赖OMI的Azure监控代理。自动扩展升级将确保Azure客户尽快获得代理的任何重要安全更新,而无需手动开销,因此是缓解上述漏洞的绝佳方式。
如果客户不选择自动更新,则需要手动完成步骤来修补他们的环境。对于大多数Azure服务,可以使用软件包管理器更新OMI。
然而,OMI漏洞的CPE详细信息没有指定OMI软件包。CVE和OMI软件包之间没有任何联系,传统漏洞管理工具看不到该漏洞,因此难以跟踪。
要评估Azure Linux VM对CVE-2022-29149的脆弱性,Azure客户可以连接到VM,并在终端中运行以下命令,以检查安装了哪个版本的OMI(如果有的话):
- 对于Debian系统(例如Ubuntu):dpkg -l omi
- 对于基于Redhat的系统(例如Fedora、CentOS、RHEL):rpm -qa omi
如果没有返回结果,这意味着没有安装OMI,机器也不易受攻击。如果返回任何结果,您将看到安装了哪个版本的OMI。最近宣布的漏洞CVE-2022-29149的补丁版本为1.6.9-1。有关更多信息和缓解指导,请参阅微软的公告。