¡¾Ô­´´Â©¶´¡¿Adobe ColdFusion ·´ÐòÁл¯RCE©¶´·ÖÎö£¨CVE-2019-7091£©

Ðû²¼Ê±¼ä 2019-02-14

©¶´¸ÅÊö


2019Äê2ÔÂ12ÈÕ£¬Adobe¹Ù·½Ðû²¼ÁËÕë¶ÔAdobe ColdFusionµÄÄþ¾²¸üв¹¶¡£¬±àºÅΪAPSB19-10 ¡£²¹¶¡ÖаüÂÞ¶¶È¦Îª¶Ä¶øÉúADLab·¢ÏÖ²¢µÚһʱ¼äÌá½»¸ø¹Ù·½µÄCritical£¨Î£¼±£©·´ÐòÁл¯Â©¶´£¬ÀûÓø鶴¹¥»÷Õß¿ÉÔ¶³ÌÖ´ÐÐÈÎÒâ´úÂë ¡£Â©¶´±àºÅΪCVE-2019-7091£¬ÈçÏÂͼËùʾ£º


×ðÁú¶¶È¦ - Ϊdu¶øÉú


±¾´Î©¶´ÎªAdobe ColdFusionÖÐFlashGateway·þÎñÖеÄ©¶´ ¡£Adobe ColdFusionµÄFlashGateway·þÎñ´æÔÚ·´ÐòÁл¯Â©¶´£¬Î´¾­Éí·ÝÑéÖ¤µÄ¹¥»÷ÕßÏòÄ¿±êAdobe ColdFusionµÄFlashGateway·þÎñ·¢Ë;«ÐĽṹµÄ¶ñÒâÊý¾Ý£¬¾­·´ÐòÁл¯ºó¿ÉÔ¶³ÌÖ´ÐÐÈÎÒâ´úÂë ¡£

©¶´Ê±¼äÖá


2018Äê9ÔÂ21ÈÕ£º½«Â©¶´ÏêÇéÌá½»¸ø¹Ù·½ £»
2018Äê12ÔÂ5ÈÕ£ºÈ·ÈÏ©¶´´æÔÚ²¢¿ªÊ¼ÐÞ¸´ £»
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()) ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


ÆäÖУ¬Ä¿±êÖ´ÐÐÒªÁìmethodͨ¹ýMethod method = this.getMethod(parameters, serviceName, functionName, aClass)µÃµ½ £»ÒªÁìÖ´Ðй¤¾ßservice ͨ¹ýservice = aClass.newInstance()µÃµ½ £»ÒªÁìÖ´ÐвÎÊýparameters.toArray()ͨ¹ýMessageBodyµÃµ½ ¡£


Óɴ˿ɼû£¬method.invoke(service, parameters.toArray())µÄËùÓòÎÊý¶¼¿É¿Ø£¬Òâζ×Å¿ÉÖ´ÐÐÈÎÒâÒªÁì ¡£


Õû¸öÁ÷³ÌÈçÏÂͼËùʾ£º


×ðÁú¶¶È¦ - Ϊdu¶øÉú

©¶´ÀûÓÃЧ¹û

×ðÁú¶¶È¦ - Ϊdu¶øÉú

Ó°Ïì°æ±¾


ColdFusion 11 Update 15¼°Ö®Ç°°æ±¾
ColdFusion 2016 Update 7¼°Ö®Ç°°æ±¾
ColdFusion 2018 Update 1¼°Ö®Ç°°æ±¾

¹æ±Ü·½°¸


ÐÞ¸Ägateway-config.xmlÎļþµÄÅäÖ㬽ûÖ¹JavaBeanAdapterµÄʹÓà ¡£

Éý¼¶×îв¹¶¡APSB19-10£ºhttps://helpx.adobe.com/security/products/coldfusion/apsb19-10.html ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú