作者:啟明星辰ADLab
公眾號:ADLab

漏洞描述

2019年2月12日,Adobe官方發布了針對Adobe ColdFusion的安全更新補丁,編號為APSB19-10。補丁中包含啟明星辰ADLab發現并第一時間提交給官方的Critical(危急)反序列化漏洞,利用該漏洞攻擊者可遠程執行任意代碼。漏洞編號為CVE-2019-7091,如下圖所示:

img

本次漏洞為Adobe ColdFusion中FlashGateway服務中的漏洞。Adobe ColdFusion的FlashGateway服務存在反序列化漏洞,未經身份驗證的攻擊者向目標Adobe ColdFusion的FlashGateway服務發送精心構造的惡意數據,經反序列化后可遠程執行任意代碼。

漏洞時間軸

2018年9月21日:將漏洞詳情提交給官方;

2018年12月05日:確認漏洞存在并開始著手修復;

2019年2月12日:官方發布正式補丁。

漏洞分析

Adobe ColdFusion的FlashGateway服務允許flash連接到CFML和CFC模板。當攻擊者通過HTTP協議向FlashGateway服務POST精心構造的ActionMessage信息后,FlashGateway服務依次通過各種類型的filter進行invoke()操作。在flashgateway.filter.SerializationFilter的invoke方法中,實例化MessageDeserializer類型的反序列工具deserializer并通過deserializer.readMessage(m)方法對精心構造的ActionMessage消息進行反序列化,同時將ActionMessage中的targetURI、data等值賦值給MessageBody。

完成序列化過程后,此時ActionContext context中的內容即為輸入流中精心構造的ActionMessage信息。在flashgateway.filter.AdapterFilter的invoke方法中,讀取ActionContext中的MessageBody信息賦值給serviceName、functionName、parameters等,通過adapter=locateAdapter(context, serviceName, functionName, parameters, serviceType)方法得到flashgateway.adapter.java.JavaBeanAdapter類型的adapter,然后執行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,執行flashgateway.adapter.java.JavaBeanAdapter的invokeFunction方法
    result =  adapter.invokeFunction(context, serviceName, functionName, parameters); }

在JavaBeanAdapter的invokeFunction方法中,看到關鍵代碼:method.invoke(service, parameters.toArray())

img

其中,目標執行方法method通過Method method = this.getMethod(parameters, serviceName, functionName, aClass)得到;

方法執行對象service 通過service = aClass.newInstance()得到;

方法執行參數parameters.toArray()通過MessageBody得到。

由此可見,method.invoke(service, parameters.toArray())的所用參數都可控,意味著可執行任意方法。

整個流程如下圖所示:

img

漏洞利用效果

img

影響版本

ColdFusion 11 Update 15及之前版本、ColdFusion 2016 Update 7及之前版本、ColdFusion 2018 Update 1及之前版本。

規避方案


啟明星辰積極防御實驗室(ADLab)

ADLab成立于1999年,是中國安全行業最早成立的攻防技術研究實驗室之一,微軟MAPP計劃核心成員。截止目前,ADLab通過CVE發布Windows、Linux、Unix等操作系統安全或軟件漏洞近400個,持續保持國際網絡安全領域一流水準。實驗室研究方向涵蓋操作系統與應用系統安全研究、移動智能終端安全研究、物聯網智能設備安全研究、Web安全研究、工控系統安全研究、云安全研究。研究成果應用于產品核心技術研究、國家重點科技項目攻關、專業安全服務等。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/811/