作者: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://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
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1962/
暫無評論