fastjson反序列漏洞autoType验证和解决
漏洞描述:fastjson在解析json过程中,支持使用autoType来实例化某一个具体的类,并通过json来填充其属性值。而JDK自带的类com.sun.org.apache.xalan.internal.xsltc.trax.Templateslmpl中有一个私有属性 _bytecodes,其部分方法会执行这个值中包含的Java字节码。
AutoType描述:FASTJSON支持AutoType功能,这个功能会在序列化的JSON字符串中带上类型信息,在反序列化时,不需要传入类型,实现自动类型识别。
漏洞验证准备
1.下载测试工具Burp Suite ,并安装; Burp Suite 社区版下载
2.dnslog在线平台; http://dnslog.cn/
3.fastjson版本1.2.83,fastjson默认autoType、safeMode的配置状态
<fastjson-version>1.2.83</fastjson-version>
/*
autoType 默认是false
safeMode 默认是false
*/
ParserConfig parserConfig = fastJsonConfig.getParserConfig();
parserConfig.setAutoTypeSupport(false);
parserConfig.setSafeMode(false);
漏洞验证过程
打开Burp Suite默认浏览器
![](https://img.haomeiwen.com/i2960218/5d6e868f4932658c.png)
访问项目地址,并登录系统,调用接口
![](https://img.haomeiwen.com/i2960218/27a2679c6627c5a9.png)
Http history找到登录接口,send to Repeater
![](https://img.haomeiwen.com/i2960218/379d1cf2002b675d.png)
![](https://img.haomeiwen.com/i2960218/fa0b849f88214bcd.png)
参数准备:在dnslog在线平台获取域名,把requestBody中json替换(如图)
调用接口:返回成功,说明fastjson进行了正常反序列化过程;
结论:autoType并没有关闭,调用者可以指定类,将数据与对象进行转化,fastjson进行了正常的反序列化过程;
![](https://img.haomeiwen.com/i2960218/a7c1d16c1e241bf6.png)
回到dns平台,点击Refresh Record,获取到了调用者的ip Address
![](https://img.haomeiwen.com/i2960218/82c12305acd687fc.png)
将fastjson的safeMode配置为true,再次调用接口
/*
autoType 默认是false
safeMode 默认是false
*/
ParserConfig parserConfig = fastJsonConfig.getParserConfig();
parserConfig.setAutoTypeSupport(false);
parserConfig.setSafeMode(true);
接口返回失败,控制台打印结果为:JSON parse error: safeMode not support autoType : java.net.InetSocketAddress; nested exception is com.alibaba.fastjson.JSONException: safeMode not support autoType : java.net.InetSocketAddress
safeMode not support autoType,说明autoType已关闭
![](https://img.haomeiwen.com/i2960218/382906df2a2e0aa1.png)
回到dns平台,点击Refresh Record,这次并没有获取到调用者的ip
![](https://img.haomeiwen.com/i2960218/eabd032fe2c32853.png)
结论:需要在代码中将fastjson的safeModel配置为true。
思考:验证其它版本,可以修改fastjson的版本号,并验证该版本是否存在autoType漏洞;
autoType漏洞其它解决方案:fastjson2.0版本
<fastjson-version>2.0.26</fastjson-version>
在fastjson saleMode、autoType默认配置下,调用接口,控制台报错:
JSON parse error: offset 46; nested exception is com.alibaba.fastjson.JSONException: offset 46
说明fastjson2.0版本在缺省配置(safeMode)下是安全的。
fastjson2.0,AutoType安全机制介绍:必须显式打开才能使用。和fastjson 1.x不一样,fastjson 1.x为了兼容有一个白名单,在fastjson 2中,没有任何白名单,也不包括任何Exception类的白名单,必须显式打开才能使用。这可以保证缺省配置下是安全的。
参考资料
FASTJSON 2 Autotype机制介绍
Fastjson反序列化漏洞1:吹吹水
Burp Suite工具的其它配置
字体配置:![](https://img.haomeiwen.com/i2960218/9769cba1c3253dc7.png)