当前位置:首页 > 漏洞预警 > 正文

FastJson远程代码执行漏洞预警

发布时间:2019-07-16 10:54:18,来源:中国信息通信研究院

      一、基本情

Java JSON组件FastJson存在远程代码执行漏洞。攻击者可以通过提交精心构造的JSON数据实现远程代码执行;经过分析发现该利用方式只影响FastJson 1.2.48 版本以下。

      二、漏洞描述

Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

据了解,该漏洞已在2018年10月完成修复。目前,漏洞利用方式被公开且该组件使用量巨大。

经过深入分析发现,该漏洞利用方式通过使用@type指定java.lang.Class绕过autoType机制并且将JndiDataSourceFactory注入到mappings,虽然FastJson在1.2.46版本就已经将JndiDataSourceFactory加入黑名单,但是代码执行流程在进入checkAutoType后,在黑名单检测流程前就提前返回了class对象,所以不用考虑黑名单机制。

FastJson的DefaultJSONParser是FastJson的默认JSON解析器,该解析器使用假定有序快速匹配算法对JSON数据进行解析,当解析到@type,并且@type不为空会调用checkAutoType进行安全检查;由于FastJson在设计的时候就考虑到性能,所以FastJson使用ASM直接生成对象而不是用反射。

所以在MiscCodec的责任链中,java.lang.Class拥有类加载的能力。

1.1.png

在FastJson 1.2.47的TypeUtils中,由于loadClass的cache参数默认为True,导致JndiDataSourceFactory被注入到mappings,从而引发了代码执行。

1.2.png

在FastJson 1.2.48中,TypeUtils的cache参数被修改为false,所以无法使用java.lang.Class将恶意链再注入到mappings中。

1.3.png

由于使用java.lang.Class成功将恶意链注入到mappings,所以在ParserConfig中成功的从deserializers获取typeName导致clazz不为空,绕过了autoType。

1.4.png

1.5.png

最终这个精妙的代码执行路径实现了任意代码执行。

1.6.png

      三、影响范围

FastJson < 1.2.48

      四、处置建议

FastJson 升级到1.2.51

FastJson 升级到1.2.58

      五、参考链接

https://github.com/alibaba/fastjson