配置错误所导致的Azure严重漏洞

iso60001  1719天前

22.png

现如今,越来越多的公司决定将它们的网络基础设施迁移到微软Azure、谷歌Cloud、亚马逊AWS等云环境中。

在当今这个快速变化的时代,基于云的网络基础设施建设既方便又经济,而且还能随时加强性能和网络。

不过云解决方案虽然有很多优点,但也有一些缺点需要注意。依赖“别人的电脑”也就意味着你需要依赖别人的安全措施。我们已经看到了很多针对云环境弱点的攻击。

本文章将探讨了我在Microsoft Azure门户中发现的一个漏洞,它可能让攻击者接管Azure环境。

说明

接管云环境蕴含的风险不言而喻。通过某个Microsoft Azure的漏洞,攻击者可以利用Azure Portal manifest中的一个配置错误来接管Azure帐户。Manifest是一个配置文件——在本案例中是一个JSON文件,它表示Web应用中的设置。

在我们对Azure Portal的研究中,观察到很多遥测报告被发送到一个不存在的域,而这些遥测请求中大多数都包含访问令牌。在这种情况下,这些访问令牌都代表着用户的权限(“user_impersonation”范围),任何Azure资源都是认可的,包括虚拟机和存储服务器(BLOBs)、流量管理器等等。这种敏感的令牌一旦泄露,可能会让攻击者接管大量Azure帐户。

我们已发现了几种针对该漏洞的攻击方法(配合DNS相关操作)。

Azure漏洞解析

Azure是微软不断扩展的云服务集合,它的设计目的是让客户在一个巨大的全球网络上构建、管理和部署应用。

Azure portal是Azure管理Web平台的名称,它可让你在任何一个地方访问和管理所有应用,还可帮助你管理、构建、部署和监视其他类型的资源——从简单的应用到复杂的云环境。因此,Azure环境通常包含许多敏感且有价值的资源,比如生产环境、客户数据、机密信息等。

想象一下,在这样一个环境中,攻击者如果得到你的最高级用户凭证——这将是一场灾难。你所有的虚拟机、存储服务器和客户数据都可能被勒索软件加密,你所有的密码和机密数据都可能被窃取。

Extensions和Manifests

Azure门户由许多称为扩展(extensions)的组件构建,每个扩展代表门户提供的不同功能。通常,扩展的设置是在一个指定的地方——在本例中,它位于一个名为“ExtensionManifest”的JSON文件中。manifest会告诉扩展的JS代码应该如何行动,应该获取和使用哪些外部资源。其中一个很好的例子是“My Dashboard”页面,如下图所示,其中的manifest文件指定了哪些URL和域名可以被JS代码使用。

33.png

当在Azure门户上浏览时,我注意到浏览器中出现了一些奇怪的请求。一开始,我以为是某个临时的服务器错误,或者可能是我的浏览器出了问题,但很快,我发现这个错误貌似影响了每个Azure用户。这激起了我的兴趣。

我开始寻找连接到主机名urehubs的任何东西,具体请求如下所示。

44.png

ExtensionManifest漏洞

ExtensionManifest中,有一个名为“HubsExtension”的扩展。

这个HubsExtenstion与其他扩展稍有不同,因为它的URI属性缺少//或任何合法的域名格式属性(例如portal.azure.com),相反,它看起来只是一个URL路径。

55.png

虽然这很有趣,但仍然不清楚为什么会出现这种奇怪的错误。我需要找到发出这些请求的特定JS代码。于是我仔细查看了处理这个扩展对象的JS代码。

javascript解析错误

tt函数(如下图所示)作为加载清单(缓存或刷新)的常规过程的一部分被调用,这在你每次浏览Azure门户时都会发生。

66.png

这个tt函数位于Content_Dynamic_uLKj31Z9Yqa文件中,会将位于Manifest文件中扩展对象的URI属性作为参数,并对其进行解析。

下图是具有类似功能的直观代码,你可以更好地理解它的功能。

77.png

该函数会获取URI参数,然后查找应该位于URI开头的两个斜杠//。但正如我们所知,由于来自HubsExtenstionURIAzureHubs/Hubs,因此slashesLocation变量将为0。

protocol变量将获取当前页面协议schema字符串,是https:

endOfUrlPath是9,因为URI中的第一个/位于第二个hub字符串之前。domainName变量是URI从第二个字符开始的子字符串,而最终结果就是urehubs

最后,返回值是下图中的对象。

88.png

在仔细查看结果时,我们可以看到返回对象中的origin属性被设置为本地服务器urehubs

现在总结一下:

  • HubsExtenstion的URI属性缺少//

  • 该字符串在JS代码中不能很好地被解析,因此该函数返回一个将origin属性设置为https://urehubs的对象

  • 带有敏感访问令牌的遥测请求随后被发送到https://urehubs/

而由遥测请求附带的特定访问令牌具有指向https://management.core.windows.net/资源的user_impersonation权限。

这意味着,如果你拥有该令牌,就可以代表其所有者执行行动。

以上这些因素的组合使得攻击者窃取授权令牌,执行恶意操成为可能。

那么,它确实可以进行攻击么?是的,的确可以。

攻击

在我们的研究中,利用了两种攻击方式——本地网络攻击和外部网络攻击。

本地环境利用

为了在本地域环境中利用该漏洞,攻击者需要做以下操作:

1.掌控一台主机名为“ureuhbs”的HTTP服务器

2.由root CA或本地域root CA签署的证书

最终,在这个本地域中访问Azure门户的每个Azure用户都会将其访问令牌发送到攻击者的服务器。

公网利用

大多数情况下,DNS服务器都能很好地完成它们的工作,但某些时候DNS服务器可能做得“太好了”。

有配置的原因,一些DNS服务器在无法根据本地记录解析时,可能会从众所周知的TLD (com,net,org等)中选择一个附加到本地主机名后。

在这种情况下,当DNS服务器试图解析urehubs时,就有可能演变成解析urehubs.comurehubs.net等。

当然,攻击者可以通过购买带有不同后缀的多个urehubs域名来解决这个问题。

但是,这还不够,因为攻击者仍然需要一个由公共root CA针对本地服务器签名的有效证书。

而从2015年11月1日起,CA/Browser论坛不再允许公开可信的SSL证书包含这些本地名称,如内部服务器名称和保留的IP地址(因为它可能导致在本地网络中发生中间人攻击)。但是,多年来仍然有一些恶意的root ca(例如,Commodo在2011年或DigiNotar在2013年被攻破)。

为了负责任,我们购买了27个不同后缀的urehubs域名,以防止其他攻击者利用这个漏洞,包括urehubs.com、urehubs.net、urehubs.org等。

另一个需要强调的要点是,一些用户关闭了浏览器中的证书验证功能。说真的,请不要这样做——当你这样做的时候,你就把自己暴露在了风险之中。

POC

通过某些操作,我们就可以成功地利用这个漏洞,并获得一个外部组织的Azure令牌。

99.png

修复

在2019年9月6日星期五,我们注意到Azure门户中的一些JS文件发生了变化。Microsoft添加了三行代码来修补漏洞。通过配合href属性,Microsoft确保URL不仅是一个路径,而且是完整有效的URL来解决漏洞。https://portal.azure.com/AzureHubs/Hubs

100.png

如果URL开头不包含任何schema,JS将把它作为到当前页面域的相对路径来处理。在本例中,这意味着我们将得到https://portal.azure.com/azurehubs/hub,而不是https://urehubs

微软还是保留了ExtensionManifest

关于ExtensionsManifest中使用URI格式,我认为应该坚持使用一种,因为不这样做可能会导致很多其他漏洞出现。

结论

我们认为该漏洞存在了近两周,可能有攻击者已经利用它。云服务对很多公司来说都是不错的选择。不过,必须记住,依赖“别人的网络基础设施”就是依赖别人的安全措施——这可能是一种非常冒险的尝试。。从本质上说,你也有责任确保云中的应用、操作系统和其他资产的安全性。

虽然这项研究是专门针对Microsoft Azure,但是这种类型的漏洞也许可能会出现在其他类似的云解决方案中。所以,当你在一个服务、程序中看到奇怪的流量或行为时,请不要忽略它,可能有一个高危漏洞等着被发现。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://www.bleepingcomputer.com/news/security/vmware-fixes-high-severity-privilege-escalation-bug-in-fusion/

最新评论

昵称
邮箱
提交评论