**作者:启明星辰ADLab
公众号:[ADLab](https://mp.weixin.qq.com/s/8_D8xwXwgETItMmJRgp6XQ "ADLab")**
### **漏洞描述**
2019年2月12日,Adobe官方发布了针对Adobe ColdFusion的安全更新补丁,编号为APSB19-10。补丁中包含启明星辰ADLab发现并第一时间提交给官方的Critical(危急)反序列化漏洞,利用该漏洞攻击者可远程执行任意代码。漏洞编号为CVE-2019-7091,如下图所示:
![img](https://images.seebug.org/content/images/2019/02/15/1550214859000-wps74F8.tmp.jpg-w331s)
本次漏洞为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](https://images.seebug.org/content/images/2019/02/15/1550214859000-wps74F9.tmp.jpg-w331s)
其中,目标执行方法method通过`Method method = this.getMethod(parameters, serviceName, functionName, aClass)`得到;
方法执行对象service 通过`service = aClass.newInstance()`得到;
方法执行参数`parameters.toArray()`通过MessageBody得到。
由此可见,`method.invoke(service, parameters.toArray())`的所用参数都可控,意味着可执行任意方法。
整个流程如下图所示:
![img](https://images.seebug.org/content/images/2019/02/15/1550214859000-wps74FA.tmp.jpg-w331s)
### **漏洞利用效果**
![img](https://images.seebug.org/content/images/2019/02/15/1550214859000-wps750A.tmp.jpg-w331s)
### **影响版本**
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>。
***
**启明星辰积极防御实验室(ADLab)**
ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员。截止目前,ADLab通过CVE发布Windows、Linux、Unix等操作系统安全或软件漏洞近400个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。
![](https://images.seebug.org/content/images/2017/05/adlab.png-w331s)
暂无评论