溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

發(fā)布時間:2021-12-20 11:46:40 來源:億速云 閱讀:761 作者:柒染 欄目:安全技術(shù)

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

一、漏洞分析

1.1 WebSphere 組件介紹

WebSphere 是 IBM 的軟件平臺。它包含了編寫、運行和監(jiān)視全天候的工業(yè)強度的隨需應(yīng)變 Web 應(yīng)用程序和跨平臺、跨產(chǎn)品解決方案所需要的整個中間件基礎(chǔ)設(shè)施,如服務(wù)器、服務(wù)和工具。WebSphere Application Server 是該設(shè)施的基礎(chǔ),其他所有產(chǎn)品都在它之上運行。WebSphere Process Server 基于 WebSphere Application Server 和 WebSphere Enterprise Service Bus,它為面向服務(wù)的體系結(jié)構(gòu) (SOA) 的模塊化應(yīng)用程序提供了基礎(chǔ),并支持應(yīng)用業(yè)務(wù)規(guī)則,以驅(qū)動支持業(yè)務(wù)流程的應(yīng)用程序。

1.2 漏洞描述

2020年6月15日,IBM官方發(fā)布了針對CVE-2020-4450漏洞的防御補丁。漏洞產(chǎn)生的原因是IBM WebSphere Application Server可以允許遠程攻擊者通過iiop協(xié)議傳輸精心構(gòu)造的序列化數(shù)據(jù),在系統(tǒng)上執(zhí)行任意代碼。

1.3 詳細分析

首先梳理一下漏洞利用流程,漏洞觸發(fā)入口位于com.ibm.ws.Transaction.JTS.TxServerInterceptor#receive_request方法。

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

控制 serviceContext和serviceContext.context_data參數(shù)值不為null,保證

boolean validOtsContext = serviceContext != null && serviceContext.context_data != null;

中的 validOtsContext 為true,從而進入下圖所示的if代碼塊

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

在代碼塊中,執(zhí)行TxInterceptorHelper.demarshalContext(serviceContext.context_data, (ORB)((LocalObject)sri)._orb())方法。

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

首先調(diào)用createCDRInputStream創(chuàng)建EncoderInputStream(CDRInputStream的子類)。創(chuàng)建PropagationContext對象,將數(shù)據(jù)流中的屬性讀取到上下文中。這里重點關(guān)注

propContext.implementation_specific_data = inputStream.read_any();

此段代碼會調(diào)用EncoderInputStream#read_any方法,進而調(diào)用CDRReader#read_any方法進行反序列化操作。

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

參考Zero Day Initiative和iswin文章,CVE-2020-4450漏洞使用WSIFPort_EJB類進行g(shù)adget構(gòu)造,同時通過反射,獲取com.ibm.rmi.iiop.Connection#setConnectionContexts方法,添加構(gòu)造的ServiceContext,滿足上述流程的前提條件,為serviceContext和serviceContext.context_data賦值。

通過構(gòu)造context_data數(shù)據(jù),在demarshalContext方法解析時觸發(fā)構(gòu)造中的惡意數(shù)據(jù),構(gòu)造方式參考marshalContext方法

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

模擬序列化流程,將構(gòu)造的惡意數(shù)據(jù)傳入result。

進入gadget使用的WSIFPort_EJB類,首先跟進readObject方法

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

在WSIFPort_EJB反序列化過程中會調(diào)用readObject方法,進而執(zhí)行

this.fieldEjbObject = handle.getEJBObject();

這里可以構(gòu)造一個惡意的fieldEjbObject 對象,為后續(xù)的jndi注入做準(zhǔn)備。

繼續(xù)跟進代碼,在com.ibm.ejs.container.EntityHandle類中實現(xiàn)了Handler接口中的getEJBObject()方法。跟進com.ibm.ejs.container.EntityHandle#getEJBObject(),發(fā)現(xiàn)lookup() jndi尋址方法。

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

以下是Jndi lookup方法調(diào)用的流程

com.sun.jndi.rmi.registry.RegistryContext#lookup
com.sun.jndi.rmi.registry.RegistryContext#decodeObject
javax.naming.spi.NamingManager#getObjectInstance
org.apache.aries.jndi.OSGiObjectFactoryBuilder#getObjectInstance
org.apache.aries.jndi.ObjectFactoryHelper#getObjectInstance
org.apache.aries.jndi.ObjectFactoryHelper#getObjectInstanceViaContextDotObjectFactories

主要跟進getObjectInstanceViaContextDotObjectFactories方法,在此方法中可以調(diào)用任何ObjectFactory類的getObjectInstance,這里根據(jù)Zero Day Initiative給出的WSIFServiceObjectFactory進行分析。

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

通過獲取遠程惡意rmi服務(wù)中構(gòu)造的xml文件并解析,讀取其中的字段數(shù)據(jù),為上圖中屬性進行賦值。

在獲取homeClass之后,調(diào)用findFindByPrimaryKey()方法

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

從此方法可以發(fā)現(xiàn)傳入的homeclass的限制條件,首先需要實現(xiàn)findFindByPrimaryKey方法。而在調(diào)用lookup方法時,限制homeclass類需要繼承EJBHome接口。

這里找到iswin提到的com.ibm.ws.batch.CounterHome接口。

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

在執(zhí)行this.object = (EJBObject)fbpk.invoke(home, this.key); 調(diào)用WSIFClientProxy#invoke方法,進行遠程方法調(diào)用。實現(xiàn)漏洞利用。

1.4 漏洞復(fù)現(xiàn)

搭建WebSphere Application Server 9.0.0.2環(huán)境,構(gòu)造惡意的反序列化數(shù)據(jù),通過iiop發(fā)送到目標(biāo)服務(wù)器,當(dāng)目標(biāo)服務(wù)器解析反序列化數(shù)據(jù),會觸發(fā)惡意代碼執(zhí)行,效果如圖:

WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析

二、影響范圍

目前受影響的WebSphere版本:

WebSphere Application Server 9.0.0.0 - 9.0.5.4

WebSphere Application Server 8.5.0.0 - 8.5.5.17

三、修復(fù)建議

官方已經(jīng)針對此漏洞發(fā)布補丁,請受影響的用戶按照以下方式進行修復(fù):

WebSphere Application Server 9.0:更新安全補丁PH25074,或者升級到9.0.5.5及更高版本。

WebSphere Application Server 8.5:更新安全補丁PH25074,或者升級到8.5.5.18及更高的版本。

四、時間軸

2020/6/15:IBM 官方分配漏洞編號CVE-2020-4450,發(fā)布補丁PH25074

2020/7/21:Zero Day Initiative 發(fā)布漏洞細節(jié)詳情

2020/8/17  深信服千里目安全實驗室分析并復(fù)現(xiàn)漏洞,發(fā)布產(chǎn)品解決方案。

五、參考鏈接

https://i.blackhat.com/eu-19/Wednesday/eu-19-An-Far-Sides-Of-Java-Remote-Protocols.pdf

https://www.thezdi.com/blog/2020/7/20/abusing-java-remote-protocols-in-ibm-websphere

https://www.iswin.org/2020/08/04/WebSphere-CVE-2020-4450-Vul-Analysis/

看完上述內(nèi)容,你們掌握WebSphere 遠程代碼執(zhí)行漏洞CVE-2020-4450的示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI