您好,登錄后才能下訂單哦!
WebSphere 遠程代碼執行漏洞CVE-2020-4450的示例分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
WebSphere 是 IBM 的軟件平臺。它包含了編寫、運行和監視全天候的工業強度的隨需應變 Web 應用程序和跨平臺、跨產品解決方案所需要的整個中間件基礎設施,如服務器、服務和工具。WebSphere Application Server 是該設施的基礎,其他所有產品都在它之上運行。WebSphere Process Server 基于 WebSphere Application Server 和 WebSphere Enterprise Service Bus,它為面向服務的體系結構 (SOA) 的模塊化應用程序提供了基礎,并支持應用業務規則,以驅動支持業務流程的應用程序。
2020年6月15日,IBM官方發布了針對CVE-2020-4450漏洞的防御補丁。漏洞產生的原因是IBM WebSphere Application Server可以允許遠程攻擊者通過iiop協議傳輸精心構造的序列化數據,在系統上執行任意代碼。
首先梳理一下漏洞利用流程,漏洞觸發入口位于com.ibm.ws.Transaction.JTS.TxServerInterceptor#receive_request方法。
控制 serviceContext和serviceContext.context_data參數值不為null,保證
boolean validOtsContext = serviceContext != null && serviceContext.context_data != null;
中的 validOtsContext 為true,從而進入下圖所示的if代碼塊
在代碼塊中,執行TxInterceptorHelper.demarshalContext(serviceContext.context_data, (ORB)((LocalObject)sri)._orb())方法。
首先調用createCDRInputStream創建EncoderInputStream(CDRInputStream的子類)。創建PropagationContext對象,將數據流中的屬性讀取到上下文中。這里重點關注
propContext.implementation_specific_data = inputStream.read_any();
此段代碼會調用EncoderInputStream#read_any方法,進而調用CDRReader#read_any方法進行反序列化操作。
參考Zero Day Initiative和iswin文章,CVE-2020-4450漏洞使用WSIFPort_EJB類進行gadget構造,同時通過反射,獲取com.ibm.rmi.iiop.Connection#setConnectionContexts方法,添加構造的ServiceContext,滿足上述流程的前提條件,為serviceContext和serviceContext.context_data賦值。
通過構造context_data數據,在demarshalContext方法解析時觸發構造中的惡意數據,構造方式參考marshalContext方法
模擬序列化流程,將構造的惡意數據傳入result。
進入gadget使用的WSIFPort_EJB類,首先跟進readObject方法
在WSIFPort_EJB反序列化過程中會調用readObject方法,進而執行
this.fieldEjbObject = handle.getEJBObject();
這里可以構造一個惡意的fieldEjbObject 對象,為后續的jndi注入做準備。
繼續跟進代碼,在com.ibm.ejs.container.EntityHandle類中實現了Handler接口中的getEJBObject()方法。跟進com.ibm.ejs.container.EntityHandle#getEJBObject(),發現lookup() jndi尋址方法。
以下是Jndi lookup方法調用的流程
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方法,在此方法中可以調用任何ObjectFactory類的getObjectInstance,這里根據Zero Day Initiative給出的WSIFServiceObjectFactory進行分析。
通過獲取遠程惡意rmi服務中構造的xml文件并解析,讀取其中的字段數據,為上圖中屬性進行賦值。
在獲取homeClass之后,調用findFindByPrimaryKey()方法
從此方法可以發現傳入的homeclass的限制條件,首先需要實現findFindByPrimaryKey方法。而在調用lookup方法時,限制homeclass類需要繼承EJBHome接口。
這里找到iswin提到的com.ibm.ws.batch.CounterHome接口。
在執行this.object = (EJBObject)fbpk.invoke(home, this.key); 調用WSIFClientProxy#invoke方法,進行遠程方法調用。實現漏洞利用。
搭建WebSphere Application Server 9.0.0.2環境,構造惡意的反序列化數據,通過iiop發送到目標服務器,當目標服務器解析反序列化數據,會觸發惡意代碼執行,效果如圖:
WebSphere Application Server 9.0.0.0 - 9.0.5.4
WebSphere Application Server 8.5.0.0 - 8.5.5.17
官方已經針對此漏洞發布補丁,請受影響的用戶按照以下方式進行修復:
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,發布補丁PH25074
2020/7/21:Zero Day Initiative 發布漏洞細節詳情
2020/8/17 深信服千里目安全實驗室分析并復現漏洞,發布產品解決方案。
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/
看完上述內容,你們掌握WebSphere 遠程代碼執行漏洞CVE-2020-4450的示例分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。