在过去的几周里,我和我的团队一直致力于Microsoft Azure和Microsoft OAuth 2.0相关的研究,并发现了一个漏洞,可导致微软Azure账户被接管。这和特定的Microsoft OAuth 2.0应用有关,攻击者可创建具有受害者权限的令牌。
OAuth应用信任域和子域有些未被Microsoft注册,因此任何人(包括攻击者)都可以注册它们。这些应用在默认情况下都被允许请求“access_token”。这两个因素的结合使得在用户权限限定下的操作得以进行——包括获得对Azure资源、AD资源的访问权限。
作为研究的一部分,我们开发了一个自动扫描应用,这样每个人都能够在他们的Azure环境中发现上述漏洞。
https://black.direct/
此外,该网站还包括BlackDirect的更多细节。
OAuth是什么?
OAuth是一种授权协议,通常被终端用户用来授予某个网站或应用从其他网站访问其信息的权限,而且无需提供网站或应用的登录密码。许多互联网公司都在广泛使用,方便用户与第三方应用或网站共享有关其帐户的信息和数据。
而下一代OAuth协议(OAuth2)允许第三方应用以资源所有者的名义获得对HTTP服务的有限访问权。访问是由客户端发起,它可以是一个网站或一个移动应用。
协议理论上是安全的,但错误的实现或不恰当的使用就会引发安全隐患。在授权过程中,第三方公司或应用获得具有特定权限的令牌,以代表令牌所属的用户进行操作。从这个角度来看,在大多数情况下,拥有高权限OAuth2令牌等同于拥有帐户本身的用户名和密码。如果攻击者窃取这样的令牌,在某些情况下,它还能绕过诸如双因素认证之类的安全限制。
当我们讨论令牌时,需要记住两种主要令牌类型。永久令牌称为“Refresh Token”,临时令牌称为“Access Token”。Refresh Token用于验证身份和获取access token(访问令牌)。
BlackDirect漏洞
根据RFC的说法,实现OAuth 2.0“授权请求”的方法之一是使用“redirect_uri”将令牌传递给应用处理程序(“redirect_uri”代表生成的OAuth令牌被传递的目的地,也就是特定的URL)。
“ReplyUrls”是一个URL白名单,它是应用的设置之一,以确定哪些URL和主机可以获得为应用生成的令牌。换句话说,“ReplyUrls”等同于“redirect_uri”。
影响OAuth应用的一个可能的攻击是“redirect_uri”的配置错误。将一个不存在的域列入白名单可让攻击者通过传递令牌到所掌控的域/子域来窃取访问令牌。这可能引发一系列危险操作。
通过研究,我们发现微软发布的一些Azure应用程序(也称为第一方应用程序)容易受到这种类型的攻击。如果攻击者获得了Microsoft信任的域和URL的控制权,则Microsoft发布的应用可帮助攻击者引导受害者自动生成具有其权限的访问令牌,只需让受害者点击一个链接或访问一个网站即可实现(只需简单的社会工程学)。
对攻击者来说,这种应用程序比其他应用程序更有价值,因为它们在任何Microsoft帐户中都是自动被认可的,攻击者不需要用户同意就可以利用它们来生成令牌。同时,也不可能从Microsoft Account的名单中删除它们,有些甚至都没有出现。
接管URL
通过使用“Get-AzureADServicePrincipal”命令,我可以列出帐户中的所有服务主体。
查看Microsoft应用中一些白名单的URL,我注意到一些以“.cloudapp.net”、“.azurewebsites.net”和“. {vm_region}.cloudapp.azure.com”结尾的数据,这些URL都可以通过Azure门户进行注册。
为了确保没有真正的攻击者能够利用这个漏洞,我注册了每一个还没有被注册的子域——一共54个。
可以被利用的应用如下:
-
Portfolios
-
O365 Secure Score
-
Microsoft Service Trust
结合利用
在这一节中,我将描述如何通过已控制的处于白名单的URL构造出一个恶意链接,让受害者无意识地给我们提供“access_token”。
要启动Web OAuth认证流程,需要浏览一个类似如下的链接:
https://login.microsoftonline.com/common/oauth2/authorize?response_type=token&client_id={CLIENT_ID}&resource={RESOURCE}&redirect_uri={REDIRECT_URI}
为了利用这个漏洞,我们必须设置好参数,以及使令牌有效的所需资源。
client_id
是指应用id,resource
是指有效令牌对应的资源,redirect_uri
是指令牌将传递给的域/URI。
假设攻击场景如下:
攻击者代表在[https://graph.windows.net](https://graph.windows.net)
具有user_impersonation
权限的用户请求令牌——也就是每个应用默认得到的权限——可以执行各类API请求,包括重置AD中其他用户的密码,将成员添加到一个目录角色或添加用户到组(取决于受害者的权限)。你可以在这里看到更多的API调用。
这个漏洞使攻击特权用户变得更加容易——无论是通过简单的社会工程学,还是攻击受害者偶尔访问的网站。无论如何,都很可能导致整个域和组织的Azure环境全面陷落。
攻击向量
无需点击
1.攻击者针对Microsoft OAuth Web流程创建了一个恶意链接(设置application_id
以匹配易受攻击的OAuth应用,将redirect_uri
设置白名单中已控制的域,将resource
设置为攻击者希望访问的资源。
2.攻击者在网站中嵌入一个iframe,并将“src”属性设置为上一步的恶意链接。
3.引诱受害者浏览网站。受害者的浏览器会渲染iframe, microsoftonline.com
将用访问令牌将其重定向到攻击者的所控制的域。
4.在攻击者域中运行的JS代码使用窃取到的访问令牌发送API请求。
一次点击
1.攻击者如上所述创建了一个恶意链接。
2.受害者点击恶意链接,microsoftonline.com
将用访问令牌将其重定向到攻击者的所控制的域。
3.在攻击者域中运行的JS代码使用窃取到的访问令牌发送API请求。
PoC
https://www.cyberark.com/wp-content/uploads/2019/12/blackdirect_poc.mp4
虽然OAuth 2.0是一种优秀的授权解决方案,但如果使用不当或配置不当,它可能会产生巨大的安全威胁,特别是第三方应用可能会拥有过高的权限,导致帐户被接管。
对于以上漏洞,用户能做的不多——微软必须发布补丁进行修复。
时间表
2019.10.29——发现漏洞
2019.10.30——漏洞报告给微软
2019.10.31——微软关闭了报告?
2019.11.07——再次报告给微软
2019.11.08——微软进行处理
2019.11.12——微软和我们联系
2019.11.20——漏洞修复
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/3246.html 来源:https://www.cyberark.com/threat-research-blog/blackdirect-microsoft-azure-account-takeover/
来源:freebuf.com 2019-12-03 17:00:15 by: 白帽汇
请登录后发表评论
注册