作者:xxhzz@星闌科技PortalLab
原文鏈接:https://mp.weixin.qq.com/s/-NW2gjwCP5R_UwCa7eDc_A

前言

在此前分析了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.htm
3.https://su18.org/post/jdbc-connection-url-attack/
4.https://kb.vmware.com/s/article/88098


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1962/