怎么進行Adobe ColdFusion反序列化RCE漏洞分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯建站自2013年創(chuàng)立以來,先為雨城等服務建站,雨城等地企業(yè),進行企業(yè)商務咨詢服務。為雨城企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
2019年2月12日,Adobe官方發(fā)布了針對Adobe ColdFusion的安全更新補丁,編號為APSB19-10。補丁中包含啟明星辰ADLab發(fā)現并第一時間提交給官方的Critical(危急)反序列化漏洞,利用該漏洞攻擊者可遠程執(zhí)行任意代碼。
漏洞編號為CVE-2019-7091,如下圖所示:
本次漏洞為AdobeColdFusion中FlashGateway服務中的漏洞。Adobe ColdFusion的FlashGateway服務存在反序列化漏洞,未經身份驗證的攻擊者向目標AdobeColdFusion的FlashGateway服務發(fā)送精心構造的惡意數據,經反序列化后可遠程執(zhí)行任意代碼。
2018年9月21日:將漏洞詳情提交給官方;
2018年12月05日:確認漏洞存在并開始修復;
2019年2月12日:官方發(fā)布正式補丁。
Adobe ColdFusion的FlashGateway服務允許flash連接到CFML和CFC模板。當攻擊者通過HTTP協(xié)議向FlashGateway服務POST精心構造的ActionMessage信息后,FlashGateway服務依次通過各種類型的filter進行invoke()操作。在flashgateway.filter.SerializationFilter的invoke方法中,實例化MessageDeserializer類型的反序列工具deserializer并通過deserializer.readMessage(m)方法對精心構造的ActionMessage消息進行反序列化,同時將ActionMessage中的targetURI、data等值賦值給MessageBody。
完成序列化過程后,此時ActionContextcontext中的內容即為輸入流中精心構造的ActionMessage信息。在flashgateway.filter.AdapterFilter的invoke方法中,讀取ActionContext中的MessageBody信息賦值給serviceName、functionName、parameters等,通過adapter=locateAdapter(context,serviceName, functionName, parameters, serviceType)方法得到flashgateway.adapter.java.JavaBeanAdapter類型的adapter,然后執(zhí)行JavaBeanAdapter的invokeFunction方法。關鍵代碼如下:
public ActionContext invoke(ActionContext context) throws Throwable { ... //讀取MessageBody信息 MessageBody requestMessageBody = context.getRequestMessageBody(); String serviceName = requestMessageBody.serviceName; String functionName = requestMessageBody.functionName; List parameters = requestMessageBody.parameters; ... if (context.isDescribeRequest()) { result = adapter.describeService(context, serviceName); } else { //adapter為JavaBeanAdapter,執(zhí)行flashgateway.adapter.java.JavaBeanAdapter的invokeFunction方法 result = adapter.invokeFunction(context, serviceName, functionName, parameters); }
在JavaBeanAdapter的invokeFunction方法中,看到關鍵代碼:method.invoke(service,parameters.toArray())。
其中,目標執(zhí)行方法method通過Method method =this.getMethod(parameters, serviceName, functionName, aClass)得到;
方法執(zhí)行對象service 通過service = aClass.newInstance()得到;
方法執(zhí)行參數parameters.toArray()通過MessageBody得到。
由此可見,method.invoke(service,parameters.toArray())的所用參數都可控,意味著可執(zhí)行任意方法。
整個流程如下圖所示:
ColdFusion 11 Update 15及之前版本
ColdFusion 2016 Update 7及之前版本
ColdFusion 2018 Update 1及之前版本。
1、修改gateway-config.xml文件的配置,禁止JavaBeanAdapter的使用。
2、升級最新補丁APSB19-10:https://helpx.adobe.com/security/products/coldfusion/apsb19-10.html。
看完上述內容,你們掌握怎么進行Adobe ColdFusion反序列化RCE漏洞分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道,感謝各位的閱讀!