Azure 应用服务漏洞造成数百个源码库泄露
Wiz 研究团队在 Azure 应用服务中检测到一个不安全的默认行为,该行为暴露了使用“Local Git”部署的用 PHP、Python、Ruby 或 Node 编写的客户应用程序的源代码。Wiz 团队将该漏洞命名为“NotLegit”,并指出这一漏洞自 2017 年 9 月以来就一直存在,很可能已经被利用。
Wiz 于 2021 年 10 月 7 日向微软报告了这个安全漏洞。微软方面在 12 月 7 日至 15 日期间向一些受影响严重的用户发送了警报邮件,目前该漏洞已经得到缓解;但还有一小部分用户可能仍处在风险当中,建议应适当采取保护措施。
根据介绍,Azure App Service(也称为 Azure Web Apps),是一个基于云计算的平台,用于托管网站和 Web 应用程序。有多种方法可以将源代码和工件部署到 Azure App Service,Local Git 就是其中之一。用户通过 Azure App Service 容器启动 Local Git 仓库,并将代码直接推送到服务器上。
问题在于,在使用 Local Git 部署方法部署到 Azure App Service 时,git 存储库是在任何人都可以直接访问的目录 (/home/site/wwwroot) 中创建的;Wiz 将此举称为微软的一个“怪癖”。而为了保护用户的文件,微软会在公共目录内的 .git 文件夹中添加了一个"web.config"文件,以限制公共访问。但是,只有微软的 IIS 网络服务器可以处理"web.config"文件。因此对于同样使用 IIS 部署的 C# 或 ASP.NET 应用程序,此缓解措施是有效的。
但对 PHP、Node、Ruby 和 Python 这些部署在不同 Web 服务器(Apache、Nginx、Flask 等)中的应用而言,这一缓解措施就会无效,从而导致容易受到攻击。“基本上,攻击者所要做的就是从目标应用程序中获取"/.git"目录,并检索其源代码。”
影响范围包括:
- 自 2017 年 9 月起,在 Azure 应用服务中使用“Local Git”部署的所有 PHP、Node、Ruby 和 Python 应用。
- 自 2017 年 9 月起,在应用容器中创建或修改文件后,使用 Git 源代码部署在 Azure 应用服务中的所有 PHP、Node、Ruby 和 Python 应用。
对此,Microsoft 安全响应中心在一份公告中回应称,Wiz 报告的这一问题导致客户可能会无意中配置要在内容根目录中创建的 .git 文件夹,从而使他们面临信息泄露的风险。
“这与配置为提供静态内容的应用程序结合使用时,会使得其他人可以下载不打算公开的文件。我们已经通知了我们认为因此而面临风险的有限的一部分客户,我们将继续与我们的客户合作,确保他们的应用程序的安全。”
Customer Impact:
- 在内容根目录中创建或修改文件后使用 Local Git 部署应用程序的 App Service Linux 客户会受到影响。
- PHP、Node、Python、Ruby 和 Java 应用程序编码以提供静态内容:PHP:用于 PHP 运行时的图像被配置为在内容根文件夹中提供所有静态内容。微软方面已经更新了所有 PHP 图像,禁止将 .git 文件夹作为静态内容提供,作为纵深防御措施。Node、Python、Java 和 Ruby:对于这些语言,由于应用程序代码控制它是否提供静态内容,微软建议客户检查代码,以确保只有相关的代码被提供出来。
不过,并非所有 Local Git 用户都受到了影响。在应用程序中创建文件后,通过 Local Git 将代码部署到 App Service Linux 的用户是唯一受影响人群。且 Azure App Service Windows 不受影响,因为它在基于 IIS 的环境中运行。
微软为此采取的具体解决措施为:
- 更新了所有 PHP 图像以禁止将 .git 文件夹作为静态内容提供,作为纵深防御措施。
- 通知因激活本地部署而受到影响的客户,并提供有关如何缓解问题的具体指导。还通知了将 .git 文件夹上传到内容目录的客户。
- 更新了安全建议文档,增加了有关保护源代码的部分。同时更新了本地部署的文档。
由于报告了这一漏洞,Wiz 方面还获得了来自微软的 7500 美元赏金,但该公司计划将这笔资金捐献出去。