¡¾Ô´´·ì϶¡¿Adobe ColdFusion ·´ÐòÁл¯RCE·ì϶·ÖÎö£¨CVE-2019-7091£©
°ä²¼¹¦·ò 2019-02-14·ì϶¸ÅÊö
±¾´Î·ì϶ΪAdobe ColdFusionÖÐFlashGateway·þÎñÖеķì϶¡£¡£¡£¡£¡£¡£¡£¡£Adobe ColdFusionµÄFlashGateway·þÎñ´æÔÚ·´ÐòÁл¯·ì϶£¬£¬£¬£¬£¬£¬£¬Î´¾Éí·ÝÑéÖ¤µÄ¹¥»÷ÕßÏòÖ¸±êAdobe ColdFusionµÄFlashGateway·þÎñ·¢Ë;«ÐÄ»ú¹ØµÄ¶ñÒâÊý¾Ý£¬£¬£¬£¬£¬£¬£¬¾·´ÐòÁл¯ºó¿ÉÔ¶³ÌÖ´ÐÐËÁÒâ´úÂë¡£¡£¡£¡£¡£¡£¡£¡£
·ì϶¹¦·òÖá
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²½Öè¡£¡£¡£¡£¡£¡£¡£¡£¹Ø¼ü´úÂëÈçÏ£º
...
//¶ÁÈ¡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); }
ÆäÖУ¬£¬£¬£¬£¬£¬£¬Ö¸±êÖ´Ðв½Öèmethodͨ¹ýMethod method = this.getMethod(parameters, serviceName, functionName, aClass)µÃµ½£»£»£»£»£»£»£»£»²½ÖèÖ´ÐжÔÏóservice ͨ¹ýservice = aClass.newInstance()µÃµ½£»£»£»£»£»£»£»£»²½ÖèÖ´ÐвÎÊýparameters.toArray()ͨ¹ýMessageBodyµÃµ½¡£¡£¡£¡£¡£¡£¡£¡£
Óɴ˿ɼû£¬£¬£¬£¬£¬£¬£¬method.invoke(service, parameters.toArray())µÄËùÓòÎÊý¶¼¿É¿Ø£¬£¬£¬£¬£¬£¬£¬Òâζ×Å¿ÉÖ´ÐÐËÁÒâ²½Öè¡£¡£¡£¡£¡£¡£¡£¡£
Õû¸öÁ÷³ÌÈçÏÂͼËùʾ£º
·ì϶ÀûÓóÉЧ
Ó°Ïì°æ±¾
ColdFusion 2016 Update 7¼°Ö®Ç°°æ±¾
ColdFusion 2018 Update 1¼°Ö®Ç°°æ±¾
¶ã±Ü¹æ»®
Éý¼¶×îв¹¶¡APSB19-10£ºhttps://helpx.adobe.com/security/products/coldfusion/apsb19-10.html¡£¡£¡£¡£¡£¡£¡£¡£


¾©¹«Íø°²±¸11010802024551ºÅ