从VMware vCenter SSRF漏洞调试来看系统模块调用与认证机制

VSole2021-12-04 18:03:39

最近网上有人爆出了VMware vCenter v7.0.2.00100版本存在未授权SSRF漏洞,相关的POC也已经公开,漏洞本身比较简单,但是深度分析VMware vCenter相关模块调用和认证机制还是很有必要的,毕竟作为一名喜欢刨根问底的技术宅男,绝对不能满足于做一个脚本小子,不知其所以然不足以支撑挖出新的洞洞来。

调试配置

在以前的文章中已经介绍过VMware vCenter远程调试配置方式:

调试配置参考
QCyber,公众号:且听安全CVE-2021-22005-VMware VCenter Server 从目录穿越到命令执行(需CEIP开启)

这里回顾一下配置方式。漏洞位于`vsphere-ui`服务中,使用如下命令获取启动参数:

tr '\0' ' ' < /proc/PID/cmdline

使用`service-control --stop vsphere-ui`命令停止服务,并在`vsphere-ui.launcher`命令后添加`-Xdebug`调试选项,在`vsphere-ui`用户下手动启动命令,随后8787端口被监听:

关闭系统防火墙,使用IDEA远程连接8787调试端口:


漏洞复现

根据公开信息,漏洞url为`/ui/vcav-bootstrap/rest/vcav-providers/provider-logo`,正常访问时提示url参数不存在。

通过500错误获取代码调用栈,最后在`ProvidersController.getProviderLogo`执行时出错。

`getProviderLogo`函数代码比较简单,通过URLConnection读取URL并解析。

首先是可以实现SSRF:

构造url参数读取本地配置文件:

调用机制分析

漏洞复现不是本文重点,本文重点是分析VMware vCenter相关配置和认证绕过的机制。根据500错误返回的调用栈信息,漏洞触发期间首先执行了`BridgeServlet`:

解压`h5-bridge-webapp.war`后在web.xml中找到有关定义,请求由`BridgeServletEx`处理:

`BridgeServletEx`为典型的OSGI处理,简要流程为`BridgeServlet->ProxyServlet->DispatcherServlet->OSGI Bundle`:

回到漏洞触发链接,找到一个名为`h5-vcav-bootstrap-ui`的war包,其plugin.xml定义了bundle的名称:

通过MANIFEST.MF文件`Web-ContextPath`得知bundle请求地址为`ui/vcav-bootstrap`,访问war包下的`homescreen.html`可成功返回内容。

这里尝试寻找bundle的加载流程,但日志中与Bundle加载相关的插件为`com.vmware.h4.vsphere.bootstrap.ui`,与xml里id并不匹配。(相关Java Package包的定义位于h5-vacv-bootstrap-service.jar中)。

在`bundle-context.xml`中找到`ProvidersController`的调用。

继续分析war包`web.xml`配置,servlet请求通过`/rest`路由处理,而`ProvidersController`属于`Servlet`接口。

`ProvidersController`代码位于`h5-vacv-bootstrap-service.jar`中,jar包中的`bootstrap-context.xml`对接口同样进行了定义:

接口请求的URL为`vcav-providers/[FUNCTION]`:

根据Servlet代码构造最终链接为`/ui/vcav-bootstrap/rest/vcav-providers/providers-list`,可实现对接口未授权访问。

调试跟踪

下面是代码调试截图,进入`BridgeServletEx`处理:

执行到`ProxyServlet`:

最后调用`getProviderLogo`函数:

利用漏洞既可以实现SSRF攻击,也可以实现任意文件读取,比如读取postgresql数据库配置:


至此整个模块调用机制就分析完毕,漏洞完整原理也一目了然。

ssrfbundle
本作品采用《CC 协议》,转载必须注明作者和本文链接
从VMware vCenter SSRF漏洞调试来看系统模块调用与认证机制。
它的云解决方案包括云产品,数据中心产品和桌面产品等。它包括了 vCenter Server, ESXi 和 vSphere client,是整套虚拟化部署方案的总和。是 vSphere 中最重要的一个组件。而 vSphere client 有更加详细的性能监控,批量更新接管所有 ESXi 系统版本。在 6.0 版本之后,官方已经取消了 C/S 架构的客户端,转而采用了 web 管理平台,又被称之为 vSphere web client。官方推荐将打包好的 Client 与 Server 应用部署在 VMware 自家的 Photon 系统下,其安装包命名为:VMware vCenter Server Appliance,简称为:VCSA。
SSRF作为入口点的利用
2022-12-15 10:55:06
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。SSRF入口的利用SSRF是由一种攻击者构造请求,由服务器端发起请求的安全漏洞。一般情况下SSRF的攻击目标是外网无法访问到的内部系统。
SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤。
一般情况下利用URL解析导致SSRF过滤被绕过基本上都是因为后端通过不正确的正则表达式对URL进行了解析。该方式主要是利用URL解析器和URL请求器之间的差异性发起攻击,由于不同的编程语言实现URL解析和请求是不一样的,所以很难验证一个URL是否合法。下图展示了cURL请求函数与其他语言解析函数结合使用时,由于差异性造成的漏洞。
FastCGI与PHP-FPM FastCGI 快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。FastCGI致力于减少网页服务器与CGI程序之间交互的开销,从而使[服务器可以同时处理更多的网页请求。
利用SSRF渗透内网主机
2021-12-26 07:39:35
接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器。这就是一个完整的动态PHP Web访问流程。
SSRF常用的四种协议
2021-07-19 10:53:05
最近在项目中遇到了ssrf漏洞,并探测到了目标机器上监听127.0.0.1的redis。尝试用ssrf打了一波,虽然最后因权限问题没能成功利用,但也学会了很多新东西,在这里给大家分享一下。
一般情况下,SSRF针对的都是一些外网无法访问的内网,所以需要SSRF使目标后端去访问内网,进而达到我们攻击内网的目的。
在研究在 Docker 容器中执行不受信任的 Python 代码会出现什么反应的过程中测试了几个在线代码执行引擎,以了解它们对各种攻击的反应。Qualified 被广泛使用,包括CodeWars 或InterviewCake等网站。能够运行代码与网络访问,且在 Amazon Web Services 中运行。
VSole
网络安全专家