VMware VeloCloud漏洞分析:未授权远程代码执行全链条揭秘

本文深入分析VMware VeloCloud Orchestrator中的三个关键漏洞,包括认证绕过、SQL注入和文件包含漏洞,这些漏洞组合可实现未授权远程代码执行,对企业网络安全构成严重威胁。

SD-PWN Part 4 — VMware VeloCloud — 最终接管

这是SD-PWN系列的最后一部分,我们在其中展示了四大领先SD-WAN供应商的严重漏洞。本次重点分析VMware的SD-WAN平台。

如果您尚未阅读之前的文章,强烈建议您阅读:

  • 第一部分 — Silver Peak Unity Orchestrator
  • 第二部分 — Citrix SD-WAN Center
  • 第三部分 — Cisco Viptela vManage

如果您使用VMware VeloCloud Orchestrator,请确保立即更新。正如我们将要演示的,以下问题会导致未授权远程代码执行。与本系列中涵盖的其他产品一样,其影响可用于破坏公司的整个国际网络。

VMware VeloCloud Orchestrator

VMware VeloCloud Orchestrator连接到边缘路由器并集中控制网络拓扑。这就是为什么从安全角度来看,它是一个关键的单点故障。

VeloCloud基础设施主要由nginx组成,主要作为node.js服务器的反向代理。

安全调查第一步

产品安全调查的首要步骤之一是映射其暴露的未授权接口。最明显的是登录和密码重置功能。

通用密码重置概念相当简单:

  1. 生成以下两者之一:
    • 不可预测的随机唯一密钥
    • 签名令牌
  2. 通过假定为用户独有预定义侧信道发送(电子邮件或短信)
  3. 提示用户输入随机密钥

在第一步中,Velocloud犯了两个严重错误。

漏洞详情

密码哈希传递攻击

Velocloud没有为重置密钥生成随机字节,而是可能查看了数据库中的用户表并心想:“嘿,我们需要一些随机字节,这里有一些看似随机的字节 — 用户的哈希密码,为什么不使用这个?”

此外,他们确实实现了一个加密的签名令牌,但也添加了使用{CLEAR}前缀的未签名明文令牌选项。

这两个问题构成了所谓的"哈希传递攻击"。

预定义后门用户

Velocloud使用了一种我们在过去几年中较少见到的做法。他们添加了预定义的后门用户。

公平地说,后门用户默认是禁用的,可能除了Velocloud之外没有人知道他们的密码,只知道他们的哈希值。然而,PTH攻击允许我们在密码重置过程中使用哈希密码,这也会重新启用用户。

这三个问题导致了第一个CVE。

漏洞利用链

认证绕过(CVE-2020-4001)

使用前面描述的程序,我们能够重置系统中拥有最高管理员权限的super@velocloud.net账户,重置后该账户不再被禁用。攻击者的事先知识包括:

两者都是预定义的,可以从安装文件中获取。这些值在系统实例之间不会改变。

SQL注入(CVE-2020-3984)

这是一个标准的SQL注入漏洞,用户控制的数据被连接到SQL查询中而没有转义任何字符。发生这种情况的地方之一是使用modulus参数的softwareUpdate/getSoftwareUpdates方法。此SQLi使我们能够从数据库中提取任何数据(非盲注)。

目录遍历+未授权文件包含(CVE-2020-4000)

portal/rest/meta处理程序使用req.originalUrl获取请求方法。然后originalUrl被用于require一个文件。现在,在路径本身中放置..符号将由Web服务器解析并省略,但originalUrl包括完整的GET查询字符串,包括GET参数。在?符号后使用包含..的URL将导致目录遍历。

1
/portal/rest/meta/none?test/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/somefile.js

此原语使我们能够执行本地磁盘上几乎任何JavaScript文件。

RCE利用链

我们没有找到任何直接的shell注入。我们的主要方法是通过上传具有受控内容的JavaScript文件来利用文件包含漏洞。但是,所有涉及文件上传的地方都对内容有限制。然后我们查看了通用文件上传模块,注意到未通过内容验证的上传文件不会被删除。

文件名是随机生成的,不会返回给用户。唯一知道文件名的部分是记录器模块。幸运的是,Velocloud添加了设置设备syslog服务器的功能。这是我们的RCE链:

  1. 重置super@velocloud.net的密码(从而启用它)
  2. 使用新启用的账户登录
  3. 设置我们自己的服务器作为系统的syslog服务器
  4. 上传JavaScript文件
  5. 使用传入的syslog消息接收随机文件名
  6. 使用Rest Meta文件包含来require JavaScript文件

这将导致我们的JavaScript代码在node.js中运行。

结束语

这结束了我们的SD-PWN系列。如果您查看市场上的SD-WAN产品,它们有一个共同点,我们认为应该得到一些关注。其中许多产品起源于初创公司,后来被大公司收购。

Silver Peak被HPE收购,Viptela被Cisco收购,VeloCloud被VMware收购。Talari被Oracle收购,但看起来Citrix共享了他们的部分代码库。

问题是初创公司通常较少重视保护其产品。他们需要从头开始构建系统,开发进度紧张,代码经常未经审查,有时会走捷径。

事实是,有些问题是微不足道的,有些更复杂,但它们都是可以通过标准安全审查发现和修复的错误。

这就是为什么需要一双专注于安全的眼睛来检查代码的关键部分。没有人希望在安全博客的文章中读到他们的产品存在这样的漏洞,或者更糟糕的是,发现它正在被野外利用。

如果您有兴趣审计您的产品或执行特殊安全研究,您可以在Twitter、LinkedIn上找到我们,或通过contact@realmodelabs.com联系我们。

这不是告别。我们的下一篇文章将聚焦于我们许多人使用的日常小工具(我们很乐意听到您的猜测),以及我们如何发现其中一些有趣但令人不安的问题。敬请关注。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计