VMware 系列产品之身份验证绕过和JDBC注入漏洞分析

 

前言

在此前分析了CVE-2022-22972 VMware Workspace ONE Access和CVE-2022-22954 VMware Workspace ONE Access SSTI RCE之后,发现当时的安全公告中同时披露了很多cve漏洞,其中就包括CVE-2022-22955和CVE-2022-22957,之前漏洞环境也一直还在,也正好再学习分析一波。

 

漏洞描述

从4月6号的漏洞公告(https://www.vmware.com/security/advisories/VMSA-2022-0011.html)显示,VMware Workspace ONE Access 在 OAuth2 ACS 框架中有两个身份验证绕过漏洞,CVE-2022-22955就是其中一个,攻击者可通过获取OAuth2客户端的激活码,激活OAuth2客户端以此绕过身份验证;而CVE-2022-22957属于JDBC注入导致的远程代码执行,具有管理访问权限的攻击者通过可控参数构造恶意JDBC URL触发反序列化,从而执行任意命令获取系统权限。

 

利用范围

产品利用范围可参考https://www.vmware.com/security/advisories/VMSA-2022-0011.html

 

漏洞分析

环境搭建

漏洞环境使用的是VMware Workspace ONE Access 21.08.0.1 OVA

具体搭建可参考https://mp.weixin.qq.com/s/zVYQQgDjcwJKAnX8SZJ5Cw

分析复现

CVE-2022-22955 OAuth2TokenResourceController ACS 身份验证绕过

定位com.vmware.horizon.rest.controller.oauth2.OAuth2TokenResourceController#generateActivationToken

存在路径:/generateActivationToken/{id}

在generateActivationToken方法中将为oauth2客户端生成激活码activationToken

接着在com.vmware.horizon.rest.controller.oauth2.OAuth2TokenResourceController#activateOauth2Client上方注解说明得很清楚,通过交换activationToken也就是前面获取到的激活码来激活oauth2客户端,获取 client ID 和 client secret,用于/SAAS/auth/oauthtoken做身份认证。

其实也就是获取到client ID 和 client secret后就可以进行身份认证的绕过。

那如果不存在如上分析的 OAuth2 客户端,也就无法利用。

在默认情况下,VMware Workspace ONE Access会安装两个内部客户端。

在VMware Workspace ONE Access安装过程中,会调用com.vmware.horizon.rest.controller.system.BootstrapController类进行初始化。

本质上会导致com.vmware.horizon.rest.controller.oauth2.OAuth2TokenResourceController#createTenant调用createDefaultServiceOAuth2Client函数,从而创建系统范围内的oauth2 客户端。

通过如上分析进行漏洞复现,看看实际效果。

首先通过/generateActivationToken/{id},获取oauth2客户端激活码。

再通过交换activation激活码来激活oauth2客户端,获取a client ID 和 client secret

最后使用 client ID 和 client secret做身份认证,并获取到可用jwt token

至此,可通过获取到的jwt token进行身份验证的绕过。

CVE‐2022‐22957 VMware Workspace ONE Access JDBC注入漏洞

VMware Workspace ONE Access 默认安装PostgreSQL数据库。

代码定位到com.vmware.horizon.rest.controller.system.DBConnectionCheckController.class

存在doCheck函数。

获取到jdbcUrl、dbUsername、encryptedPwd(加密后dbPassword)后调用dbConnectionCheckService.checkConnection

com.vmware.horizon.datastore.impl. DbConnectionCheckServiceLmpl#checkConnection中将会调用testConnection

而在testConnection中会继续调用FactoryHelper.getConnection

在FactoryHelper.getConnection中最终调用DriverManager.getConnection用于获取数据库的连接,而其中的jdbc URL完全可控。

这就导致了jdbc注入,从而任意命令执行。

后续利用可参考

https://srcincite.io/blog/2022/08/11/i-am-whoever-i-say-i-am-infiltrating-vmware-workspace-one-access-using-a-0-click-exploit.html

 

修复建议

根据官方解决方案https://kb.vmware.com/s/article/88098 进行修复。

 

参考材料

1.https://www.vmware.com/security/advisories/VMSA-2022-0011.html

2.https://srcincite.io/blog/2022/08/11/i-am-whoever-i-say-i-am-infiltrating-vmware-workspace-one-access-using-a-0-click-exploit.html

3.https://su18.org/post/jdbc-connection-url-attack/

4.https://kb.vmware.com/s/article/88098

(完)