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

本文深入分析VMware VeloCloud Orchestrator平台存在的严重安全漏洞,包括认证绕过、SQL注入和目录遍历漏洞,攻击者可通过组合利用这些漏洞实现未授权远程代码执行,对企业国际网络造成全面威胁。

SD-PWN第4部分 — VMware VeloCloud — 最终接管

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

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

  • 第1部分 — Silver Peak Unity Orchestrator
  • 第2部分 — Citrix SD-WAN Center
  • 第3部分 — Cisco Viptela vManage

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

VMware VeloCloud Orchestrator

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

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

如果看起来随机,游动像随机,叫起来像随机,它是否随机?

产品安全调查的第一步是映射其暴露的未认证接口。最明显的是登录和密码重置。

通用密码重置概念相当简单: 生成以下两项之一:

  • 无法预测的随机唯一密钥
  • 签名令牌

使用预定义的侧信道(假定为用户独有)发送(电子邮件或短信) 提示用户输入随机密钥

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

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

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

这两个问题构成了所谓的传递哈希攻击(Pass The Hash Attack)。

但你怎么知道哈希密码呢?通常,我们会尝试寻找其他漏洞进行数据库数据提取,即SQL注入。

但这就是变得有趣的地方。Velocloud使用了一种我们在过去几年中较少见到的做法。他们添加了预定义的后门用户。

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

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

使用PTH + 默认账户的认证绕过 — CVE-2020-4001

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

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

这个问题利用了所有其他问题,并允许未经认证的一方运行它们。

Modulus参数SQL注入 — CVE-2020-3984

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

Rest Meta目录遍历 + 未认证文件包含 — 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文件。

虽然此问题暴露给未经认证的攻击者,但我们没有找到未经认证的方法来上传文件以便可以包含它。我们尝试考虑从网络而不是磁盘传递js代码的方法(例如使用/proc/self/fd/*),但这没有奏效,而且我们已经找到了其他足够的漏洞。如果您有任何可以帮助require受控内容而不将文件放到磁盘上的voodoo Linux技巧,我们很乐意听取您的意见。

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中运行。以下是POC脚本:

RealmodeLabs/SD-PWN VMware Velocloud Orchestrator RCE github.com

结束语

这结束了我们的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 设计