聚焦源代码安全,网罗国内外最新资讯!

作者:Mikhail Klyuchnikov

编译:奇安信代码卫士团队

Positive Technologies 公司的安全研究员 Mikhail Klyuchnikov 发现了 VMware vCenter 中的 RCE 漏洞 (CVE-2021-21972)。鉴于该漏洞的 PoC 已发布,因此他公开了发现该漏洞的完整历程和技术详情,如下是其博客内容。

2020年秋,我从 VMware vCenter 的 vSphere Client 组件中发现了多个漏洞,可导致越权客户端通过多种协议以目标服务器的身份执行任意命令并发送请求:

  • 越权文件上传导致远程代码执行 (RCE) (CVE-2021-21972)

  • 越权服务器端请求伪造 (SSRF) 漏洞 (CVE-2021-21973)

本文将说明发现 VMware vSphere 客户端 RCE 漏洞的过程以及技术详情,并解释如何可在多种平台上利用它。

VMware vCenter/vSphere 可使企业基础设施虚拟化,并提供控制手段。虽然也可从外围看到该软件但多数情况下它位于内网中。

漏洞发现

在分析 vSphere Client 时,像往常一样,我同时采用了黑盒测试和白盒测试方法,专注于无需授权即可利用的漏洞。我尝试通过 Web 面板发送尽可能不同的请求且全部都没有 cookie 标头。

向 /ui/vropspluginui/rest/services/* 发送未授权请求后,我发现它确实并没有要求任何认证。

该 Web 应用的某些特征依赖于通常位于单独 .jar 文件中的插件。例如,vropspluginui 插件就在文件 vropsplugin-service.jar 中执行。

就我的理解,每个插件必须指定其中哪些端点要求在 Web 面板中授权才能运行以及哪些不需要。该插件被配置为允许未授权用户访问所处理的任何 URL。

负责 URL /ui/vropspluginui/rest/services/uploadova 的 uploadOvaFile 函数引起了我的兴趣。

(易受攻击的代码)

该路径的句柄执行如下动作:

  • 收到含有 uploadFile 参数的 POST 请求

  • 读取并将该参数的内容写入 inputStream 变量

  • 以 .tar 文档格式打开结果数据

  • 检索所有文档的(无目录)条目

  • 在遍历所有条目时,使用文件命名约定 /tmp/unicorn_ova_dir + entry_name 在磁盘上创建每个当前条目的副本

正是在这个地方,我注意到 .tar 条目的名称并未过滤,只是通过字符串 “/tmp/unicorn_ova_dir” 进行了拼接;在相应位置创建了文件。这意味着我们可以创建包含字符串 “../” 的文档条目,从而将任意文件上传到服务器上的任意目录中。

为使 .tar 文档利用这一行为,我再次使用了 evilarc 工具。

python evilarc.py -d 2 -p 'testFolder\' -o win -f winexpl.tar testUpload.txt

结果文档中包含一个名为 “..\..\testFolder\testUpload.txt” 的文件。我将其上传到 URL /ui/vropspluginui/rest/services/uploadova 中并检查服务器的文件系统的 c:\root 目录中是否存在 testFolder 文件夹及其嵌入文件。

POST /ui/vropspluginui/rest/services/uploadova HTTP/1.1
Host: vSphereClient.local
Connection: close
Accept: application/json
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryH8GoragzRFVTw1VD
Content-Length: 10425------WebKitFormBoundaryH8GoragzRFVTw1VD
Content-Disposition: form-data; name="uploadFile"; filename="a.ova"
Content-Type: text/plain{craftedArchive}
------WebKitFormBoundaryH8GoragzRFVTw1VD--

我的 .txt 文件均已成功上传,目前可通过 C:\testFolder\testUpload.txt 访问。

在 Windows 系统上获得 RCE

为了在目标系统上执行任意命令,我们需要上传一个无需授权即可访问的 .jsp shell。为了发现这类位置,我们需要:

  • 从磁盘上找到可写路径,可使用之前描述的漏洞创建文件

  • 将找到的文件路径映射到可访问 web-roots、运行 .jsp 脚本且无需授权的文件夹结构中。

首先,我们先上传文件 testUpload.txt,检查下所上传的文件会获取哪些权限,并查看其属性目录。从中可知它的所有人是用户 “vsphere-ui”。

在搜索候选位置时,目录 C:\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\ (含有 .jsp 文件)看起来不错。

检查对 jsp 脚本的未授权访问时成功了。先来查看 vsphere-ui 是否对该目录拥有写权限。

结果确实如此。现在我们可以上传一个特殊构造的 .jsp 文件,在系统上执行命令。

我们先创建一个包含构造的 .jsp shell payload 的文档并将其发送到正在研究的 URL。

python evilarc.py -d 5 -p 'ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport' -o win -f winexpl.tar testRCE.jsp

.jsp 已被上传到服务器,使我们能够以 NT AUTHORITY\SYSTEM 权限在系统上执行任意命令。

在 Linux 上获得 RCE

Linux 实例的情况稍有不同。但它们也易受攻击且可导致外部用户上传任意文件。

在 Linux 上,我无法找到可允许同时上传并执行 .jsp shell 的目录,但存在另外一种可在服务器上执行命令的方法。

我们可以以 vsphere-ui 用户权限上传任意文件,但如果我们将公钥上传到该用户的 home 目录并尝试使用私钥通过 SSH 连接到服务器会怎么样?

我们先查看下是否可从外部访问 SSH:

nmap -p 22 vSphereLinux.local

第一步,生成一个密钥对:

ssh-keygen -t rsa

随后以生成的公钥创建一个 .tar 文档:

python evilarc.py -d 5 -p 'home/vsphere-ui/.ssh' -o unix -f linexpl.tar authorized_keys

接着,利用该漏洞上传文件并尝试通过 SSH 连接到目标主机:

ssh -i /path/to/id_rsa vsphere-ui@vSphereLinux.local

成了!我们可以以 vsphere-ui 用户的权限访问服务器。

结论

本文演示了以未认证用户身份在 VMware vSphere Client 中实现 RCE 的方法。除了访问命令行外,攻击者可利用 vropspluginui 插件中缺乏认证的情况执行其它恶意动作。

强烈建议用户更新至最新版本。更多信息可参见:

https://www.vmware.com/security/advisories/VMSA-2021-0002.html

时间线

  • 2020年10月2日:漏洞提交

  • 2020年10月3日:厂商首次回应

  • 2020年10月9日:漏洞复现成功,厂商着手修复

  • 2021年2月23日:漏洞修复,安全公告发布

推荐阅读

VMware 修复 vCenter 服务器中的严重 RCE 漏洞

1个已知CVE,7步,找到一个高质量RCE并获奖金

原文链接

https://swarm.ptsecurity.com/unauth-rce-vmware/

题图:Pixabay License

本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

 觉得不错,就点个 “在看” 或 "赞” 吧~

谈谈我们如何发现 VMware vCenter 的越权 RCE相关推荐

  1. 速修复!VMware vCenter Server 所有版本受严重的 RCE 漏洞影响

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 VMware 修复了位于 vCenter Server 中的一个严重漏洞.攻击者可利用该漏洞在服务器上执行任意代码. 该漏洞的编号是 CV ...

  2. 公司虚拟化平台VMware vCenter Server无法连接故障排查解决

    1.环境: 系统:Windows 2008R2 vCenter版本:VMware vCenter Server 5.1.799731 数据库:Oracle 11.2.0 2.故障描述: 用VMware ...

  3. VMware vCenter Converter Standlone迁移手册

    目   录 1.VMware vCenter Converter Standalone 简介 3 1.1  Converter Standalone 组件及克隆方式 3 1.2  Converter ...

  4. 2、VMware vCenter Server5.1功能介绍与安装

    一.VMware vCenter Server简介 VMware vCenter Server是vSphere平台中最重要部分之一,是整个vSphere平台的管理中心.它可以以单一控制的点管理所有vS ...

  5. 停止、启动或重新启动 VMware vCenter Server Appliance 6.x 及更高版本上的服务 (2109887)

    停止.启动或重新启动 VMware vCenter Server Appliance 6.x 及更高版本上的服务 (2109887) https://kb.vmware.com/s/article/2 ...

  6. VMware vCenter 资源池

    VMware vCenter 资源池 https://www.cnblogs.com/airoot/p/9232129.html 1.简介 资源池是灵活管理资源的逻辑抽象.资源池可以分组为层次结构,用 ...

  7. (复现)CVE-2021-21985 Vmware vcenter远程代码执行RCE

    0x00 简介 vSphere 是 VMware 推出的虚拟化平台套件,包含 ESXi.vCenter Server 等一系列的软件.其中 vCenter Server 为 ESXi 的控制中心,可从 ...

  8. VMware vCenter突然无法正常登陆,出现[503 Service Unavailable]

    文章目录 问题描述 问题分析 解决方案 证书检查 参考资料 问题描述 客户的Veeam邮件通知每日备份失败,原因是用户与密码认证失败.鉴于是通过VMware vCenter实施虚拟化基盘整体备份的,那 ...

  9. 服务器虚拟化P2V迁移,VMware vCenter Converter简化V2V及P2V迁移

    在运行多个虚拟化平台后,如果打算采用vSphere作为统一的虚拟化平台,可以使用VMware vCenter Converter简化不同平台的转换过程.VMware vCenter Converter ...

最新文章

  1. 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 1.1 从解决方案中甄别需求...
  2. php memcached windows,php memcached windows安装
  3. regex example
  4. VIM 下工程的管理工具
  5. Java面向对象练习题之三角形
  6. 微信小程序电商实战-购物车(上)
  7. paip..net c# 调用JS JAVASCRIPT变量与方法
  8. 这 10 个 Python 可视化工具,你用过哪些?
  9. r语言 rgl 强制过程中_R语言中编写最小工作示例(MWRE)
  10. Alt键一直处于按下状态 解决办法
  11. 利用flex布局在父元素和子元素宽高不明的情况下设置某一子元素剩余父元素的宽高
  12. 如何用MFC画出直线、虚线、折线、圆、椭圆、矩形、弧形(附上源码)
  13. Win11 封杀第三方浏览器工具,不用 Edge 就不行
  14. 现代微服务拆分与设计
  15. 解决已安装模块无法import的问题
  16. numpy.random.rand(d0,d1....,dn)和numpy.random.randint()
  17. 欧拉定理及扩展(附证明)
  18. 单片机c语言串口通信协议实现,单片机C语言之串口通信协议
  19. Web(一)Web前端开发概述
  20. 阿里云搭建frp(其他云,通用)内网穿透

热门文章

  1. 设置不输入密码ssh登录
  2. SpringMVC RedirectView的使用以及源码分析
  3. python 网络请求类库 requests 使用
  4. WINDOWS假冒KERBEROS令牌***域
  5. 【转】Delphi实现自动发贴和识别验证码 王泽宾
  6. idou老师教你学Istio 04:Istio性能及扩展性介绍
  7. (转)STORM启动与部署TOPOLOGY
  8. xen-tools创建虚拟机找不到root fs的解决办法
  9. ORA-01747: user.table.column, table.column 或列说明无效
  10. rand()和srand()产生伪随机数zz