VMware VeloCloud 远程代码执行漏洞全解析

本文详细分析了VMware VeloCloud Orchestrator中的多个高危漏洞,包括认证绕过、SQL注入和文件包含漏洞,这些漏洞可被串联实现未授权远程代码执行,对企业网络安全构成严重威胁。

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

Ariel Tempelhof
5分钟阅读 · 2020年11月26日

这是我们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账户,之后它不再被禁用。攻击者的事先知识是:

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

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

模数参数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将导致目录遍历。

/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受控内容而无需将文件写入磁盘的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

结束语

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

Silver Peak被HPE收购,Viptela被思科收购,VeloCloud被VMware收购。Talari被Oracle收购,但看起来Citrix共享了它们的一些代码库。

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

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

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

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

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

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