怎么进行Adobe ColdFusion反序列化RCE漏洞分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联建站自2013年创立以来,先为雨城等服务建站,雨城等地企业,进行企业商务咨询服务。为雨城企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
2019年2月12日,Adobe官方发布了针对Adobe ColdFusion的安全更新补丁,编号为APSB19-10。补丁中包含启明星辰ADLab发现并第一时间提交给官方的Critical(危急)反序列化漏洞,利用该漏洞攻击者可远程执行任意代码。
漏洞编号为CVE-2019-7091,如下图所示:
本次漏洞为AdobeColdFusion中FlashGateway服务中的漏洞。Adobe ColdFusion的FlashGateway服务存在反序列化漏洞,未经身份验证的攻击者向目标AdobeColdFusion的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。
完成序列化过程后,此时ActionContextcontext中的内容即为输入流中精心构造的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())。
其中,目标执行方法method通过Method method =this.getMethod(parameters, serviceName, functionName, aClass)得到;
方法执行对象service 通过service = aClass.newInstance()得到;
方法执行参数parameters.toArray()通过MessageBody得到。
由此可见,method.invoke(service,parameters.toArray())的所用参数都可控,意味着可执行任意方法。
整个流程如下图所示:
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漏洞分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!