- Oxeye 研究团队已经能够在 Spotify 的开源、CNCF 孵化项目 Backstage 中执行远程代码。
- 该漏洞CVSS评分为9.8,可通过vm2第三方库进行VM沙箱逃逸利用。
- Oxeye 报告了该漏洞,并在不久之后修复了该漏洞。敦促使用 Backstage 的组织立即安装最新补丁。
Oxeye研究团队宣布他们可以在 Spotify 的开源 CNCF 孵化项目 Backstage 中获得远程代码执行。为了执行远程代码,该团队通过 vm2 第三方库利用了 VM 沙箱逃逸。RCE 漏洞已通过 Spotify 的漏洞赏金计划进行了报告,并在 1.5.1 版本后不久进行了修补。该漏洞可追踪为CVE-2022-36067 ,CVSS 评分为 9.8。
开源 CNCF 孵化项目
远程代码执行漏洞可能允许威胁参与者在 Backstage 应用程序上执行任意系统命令,可以通过 Scaffolder 核心插件中的 vm2 沙箱逃逸加以利用。Backstage 目前被美国航空公司、Netflix、Splunk、Fidelity Investments 和 Epic Games 以及 Spotify 使用。成功的利用对任何受影响的组织都具有重要意义,并可能危及这些服务及其持有的数据。后台包括:
- 用于管理所有软件(微服务、库、数据管道、网站、ML 模型等)的后台软件目录
- 用于快速启动新项目并根据组织的最佳实践标准化工具的后台软件模板
- 后台 技术文档,使用“类文档代码”方法可以轻松创建、维护、查找和使用技术文档
- 一个不断发展的开源插件生态系统,进一步扩展了其可定制性和功能
后台分为三个部分:
- 核心: 核心开发人员在开源项目中构建的基本功能
- 应用程序: 已部署和调整的 Backstage 应用程序实例。它将核心功能与附加插件联系在一起。它由应用程序开发人员构建和维护,通常由公司的生产力团队负责。
- 插件: 使您的 Backstage 应用程序更有用的附加功能。插件可以特定于公司或开源/可重用。
Backstage 开始使用 vm2 JavaScript 沙箱库来降低另一个风险。Oxeye 研究人员发现了一个 vm2 沙箱逃逸漏洞,导致在托管机器上远程执行代码。Oxeye 解释了利用的步骤:
- 访问范围函数构造函数属性,该属性提供对沙盒函数构造函数的访问。我们使用它来创建一个立即调用的函数表达式 (IIFE),其中包含我们的漏洞利用代码(在 Nunjucks 的渲染引擎上下文中)。
- 覆盖 renderString 函数以包含我们自己的实现,这样我们就可以在 VM 而不是 Nunjucks 的上下文中运行。这是利用漏洞所必需的(这里 的env 是 Nunjucks 参考)。
- 通过调用未定义的函数 (triggerException) 触发错误。这会导致 NunjucksWorkflowRunner.render 第二次调用 SecureTemplater.render 函数。
- 保存原始错误类的副本。
- 用一个新的空类覆盖原来的错误类。
- 在新建的 Error 类下实现 prepareStackTrace 函数。
- 创建已保存错误类的实例并访问其堆栈属性。这会触发内置的 Node 错误模块来调用我们对 prepareStackTrace 函数的实现。
- 访问 traces 数组中提供的 CallSite 对象,我们在其上调用 getThis 函数。这为我们提供了一个在沙箱外创建的对象,允许我们执行任意系统命令。
牛眼说,
« 如果您在您的组织中使用 Backstage,我们强烈建议您将其更新到最新版本以尽快抵御此漏洞。
此外,如果您在应用程序中使用模板引擎,请确保您选择了与安全相关的正确引擎。强大的模板引擎非常有用,但可能会给您的组织带来风险。
任何基于模板的 VM 逃逸的根源都是在模板中获得 JavaScript 执行权。通过使用“无逻辑”模板引擎,例如 Mustache,您可以避免引入服务器端模板注入漏洞。尽可能将逻辑与表示分离可以大大减少您暴露于最危险的基于模板的攻击。»