Fastjson反序列化远程代码执行漏洞
fastjson已使用黑白名单用于防御反序列化漏洞,经研究该利用在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大。建议fastjson用户尽快采取安全措施保障系统安全。
高危
受影响版本:Fastjson ≤ 1.2.80
截止发稿安全版本:Fastjson = 1.2.83
可使用以下命令检测当前使用的Fastjson版本:
lsof | grep fastjson
漏洞复现
暂无,等待后续更新。
一、升级到最新版本1.2.83
参考链接:
https://github.com/alibaba/fastjson/releases/tag/1.2.83
升级步骤如下:
1.备份原fastjson依赖库,避免升级失败的情况发生。
2.将低版本的fastjson库替换为1.2.83版本即可
开发人员可通过配置Maven的方式对应用进行升级并编译发布,配置如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
该版本涉及autotype行为变更,在某些场景可能会出现不兼容的情况。
二、safeMode加固
fastjson在1.2.68及之后的版本中引入了safeMode,配置safeMode后,无论白名单和黑名单,都不支持autoType,可杜绝反序列化Gadgets类变种攻击(关闭autoType注意评估对业务的影响)。
开启方法
有三种方式配置SafeMode:
1.在代码中配置
ParserConfig.getGlobalInstance().setSafeMode(true);
注意,如果使用new ParserConfig的方式,需要注意单例处理,否则会导致低性能full gc。
2.加上JVM启动参数
-Dfastjson.parser.safeMode=true
如果有多个包名前缀,用逗号隔开。
3.通过fastjson.properties文件配置
通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.safeMode=true
参考官方文档:
https://github.com/alibaba/fastjson/wiki/fastjson_safemode
另可通过将有风险的类添加至黑名单进行防护:
ParserConfig.getGlobalInstance().addDeny("类名");
fastjson v2地址 https://github.com/alibaba/fastjson2/releases
fastjson已经开源2.0版本,在2.0版本中,不再为了兼容提供白名单,提升了安全性。fastjson v2代码已经重写,性能有了很大提升,不完全兼容1.x,升级需要做认真的兼容测试。
// com.alibaba.fastjson.parser.ParserConfig.AutoTypeCheckHandler
/**
* @since 1.2.68
*/
public interface AutoTypeCheckHandler {
Class<?> handler(String typeName, Class<?> expectClass, int features);
}
// com.alibaba.fastjson.parser.ParserConfig#addAutoTypeCheckHandler
JSON.toJSONString(obj, SerializerFeature.WriteClassName); // 这种使用会产生@type
六、使用JSONType.autoTypeCheckHandler
在fastjson 1.2.71版本中,提供了通过JSONType配置autoTypeCheckHandler的方法,比如:
public class JSONTypeAutoTypeCheckHandlerTest extends TestCase {
public void test_for_checkAutoType() throws Exception {
Cat cat = (Cat) JSON.parseObject("{"@type":"Cat","catId":123}", Animal.class);
assertEquals(123, cat.catId);
}
(autoTypeCheckHandler = MyAutoTypeCheckHandler.class)
public static class Animal {
}
public static class Cat extends Animal {
public int catId;
}
public static class Mouse extends Animal {
}
public static class MyAutoTypeCheckHandler implements ParserConfig.AutoTypeCheckHandler {
public Class<?> handler(String typeName, Class<?> expectClass, int features) {
if ("Cat".equals(typeName)) {
return Cat.class;
}
if ("Mouse".equals(typeName)) {
return Mouse.class;
}
return null;
}
}
}
参考链接:
https://github.com/alibaba/fastjson/wiki/security_update_20220523
https://mp.weixin.qq.com/s/EjINCNh51MDeSuuH8p1mKw
声明:文章中所涉及工具仅限学习记录使用,请勿用于非法用途,如有侵权,请联系后台删除。
我知道你 在看 哦
原文始发于微信公众号(401SecNote):漏洞通报 | Fastjson反序列化远程代码执行漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论