原文:
https://www.intezer.com/blog/malware-analysis/kud-i-enter-your-server-new-vulnerabilities-in-microsoft-azure/
有删减
第一个漏洞使攻击者可以访问服务器来接管App Service的git存储库,并植入可通过Azure门户访问的网络钓鱼页面。第二个漏洞使攻击者在应用程序(SSRF)上具有低严重性漏洞,可以升级到App Service上的完整代码执行并触发第一个漏洞。我们创建了一个视频,演示这个漏洞:
https://youtu.be/UDqqr3amzu0
Azure应用服务
Azure App Services是用于托管Web应用程序的基于HTTP的服务,并且在Microsoft Azure Cloud和本地安装中均可用。我们将具体指的是云版本。
App Services很有用,因为它允许开发人员简单地编写一个应用程序来提供HTTP服务,然后将其推送到git。从那里开始,Azure将处理所有令人讨厌的部署详细信息,并提供一个由Azure管理的域名。
要开始使用App Services,用户必须首先创建一个App Service Plan,这是App Services将使用的计算机。该机器的主要目的是托管App Service容器。
用户创建应用程序服务后,Azure将创建一个新的Docker环境,该环境由两个容器节点组成:管理者节点和应用程序节点。
然后注册两个域:
- app.azurewebsites.net-指向应用程序的HTTP Web服务器。
- app.scm.azurewebsites.net –指向Azure提供的App Service的管理页面。

该管理页面由一个名为Kudu的Microsoft开源项目提供。对于Linux,这是一个鲜为人知的兄弟项目KuduLite。Kudu实例托管在管理器节点上,而应用程序本身托管在应用程序节点上。我们将重点介绍KuduLite变体。
KuduLite实例提供有关系统的用户诊断信息,包括Docker日志,设置和其他环境信息。如果用户选择使用Azure托管应用程序的git,则由此Kudu服务对其进行管理。
另一个有用的功能是在Kudu实例上运行交互式bash的Web界面,以及用于将SSH到应用程序节点的附加Web界面(名为webssh的单独的Azure项目)。
app节点内的应用程序以root身份运行,我们可以以root身份通过SSH进入该节点。但是,当访问Kudu实例时,我们将获得一个低特权用户:

该用户只能与/ home交互,并且无法写入其他目录中的文件。有趣的是,在此实例中安装了ClamAV。
漏洞1:KuduLite接管/ EoP
在研究webssh如何将Web界面连接到应用程序节点的SSH服务时,我们注意到它使用硬编码的凭据“ root:Docker!”。访问应用程序节点:

这不会造成危险,因为无法从Internet访问应用程序节点的SSH端口。
我们之前观察到KuduLite实例也运行SSH,因此我们在KuduLite实例上使用了相同的凭据,并且能够以root用户身份登录

提醒一下,App Service KuduLite的开发人员确保管理员只能以低特权用户身份登录它,因此我们知道这是意料之外的。
由于我们现在控制了KuduLite框,因此我们可以完全控制SCM Web服务器。我们可以侦听用户对SCM网页的HTTP请求,添加我们自己的页面,然后将恶意Javascript注入到该用户的网页中。
最初,我们试图从SCM用户的cookie窃取他们对服务器的请求中,但是,我们很快发现有一个nginx中间件,可以在请求到达KuduLite之前从请求中剥离这些cookie。此外,Cookie具有HttpOnly属性,这意味着我们无法在客户端的浏览器上使用Javascript来窃取它们。Microsoft的这些缓解措施在限制此漏洞的潜在损害方面非常有效。
尽管有缓解措施,攻击者仍然可以利用此漏洞造成损害,我们在“主要发现”部分的视频中介绍了这种情况,攻击者使用该漏洞将网络钓鱼页面植入应该是SCM网页的网页中。
用户还可以选择让App Services管理 git服务器,该服务器将由KuduLite处理。然后,攻击者可以将恶意代码添加到存储库中,以实现持久性并传播到使用同一git服务器的其他实例。
漏洞2:KuduLite中缺少访问检查,允许使用SSRF的攻击者将本地文件包含或远程执行代码(LFI / RCE)
第二个漏洞位于KuduLite API中,它与Kudu的API非常相似。应用程序节点能够将请求发送到KuduLite API,而无需任何访问验证。考虑具有SSRF漏洞的Web应用程序时,这尤其成问题。
设法伪造GET请求的攻击者可以通过KuduLite VFS API访问应用程序节点的文件系统:

这将使攻击者能够轻松地窃取应用程序节点上的源代码和其他资产。
设法伪造POST请求的攻击者可以通过命令API在应用程序节点上实现远程代码执行:

相比之下,在Windows(使用Kudu)中,从应用程序节点发送到管理器节点的数据包将被丢弃。
最后,这两个漏洞可以链接在一起,因为一旦攻击者利用第二个漏洞实现了代码执行(假设它们具有SSRF漏洞),他们就可以利用第一个漏洞。
译者按:
一个无法外部访问的硬编码漏洞、一个ssrf,两个漏洞的完美组合,任意登陆。有些服务、应用依赖于绑定127.0.0.1来保护自己,不被外部访问,然后起高权限,像这种服务或应用一旦受到SSRF攻击,就很容易沦陷。同时,如果我们在设计服务或应用的同时,一定要设置认证。默认安全很重要。
本文迁移自知识星球“火线Zone”