Fastjson反序列化远程代码执行漏洞产生原因及修复建议
Fastjason是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。由于其序列化jason文件速度快且中文文档非常全面,所以为国内广大开发人员所应用。
fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快。
第三方独立测试结果可参考:https://github.com/eishay/jvm-serializers/wiki
一、漏洞产生原因:
Fastjson使用黑白名单用于防御反序列化漏洞,并允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名。在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大(也就是通常所指的“Gadget”)。
二、受影响的版本:
特定依赖存在下影响 ≤1.2.80
三、漏洞等级:
风险评级:高危
四、官方修复方案:
1. 升级到1.2.83版本
从源代码可以看到:
- 该版本源代码删除了很多白名单对应的hash;
- checkAutoType(String typeName, Class<?> expectClass, int features)方法,添加了新的校验包含mask和autoTypeSupport,用来规避未经验证的autoType的注入。
2. 原来1.2.68以后到1.2.80的版本:开启配置safeMode,让白名单和黑名单都不支持autoType,从而可杜绝反序列化Gadgets类变种攻击。
在1.2.68版本中,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。所有的安全修复版本sec10也支持SafeMode配置。
- 打开SafeMode功能(1.2.68之后的版本)
有三种配置SafeMode方式,如下:
①在代码中配置
ParserConfig.getGlobalInstance().setSafeMode(true);
注意,如果使用new ParserConfig的方式,需要注意单例处理,否则会导致低性能full gc。
②加上JVM启动参数
-Dfastjson.parser.safeMode=true
如果有多个包名前缀,用逗号隔开
③通过fastjson.properties文件配置。
通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.safeMode=true
- safeMode场景如何做autoType
在1.2.68之后的版本,提供了AutoTypeCheckHandler扩展,可以自定义类接管autoType, 通过ParserConfig#addAutoTypeCheckHandler方法注册。
- 怎么判断是否用到了autoType
看序列化的代码中是否用到了SerializerFeature.WriteClassName
JSON.toJSONString(obj, SerializerFeature.WriteClassName); // 这种使用会产生@type
- 使用JSONType.autoTypeCheckHandler
在fastjson 1.2.71版本中,提供了通过JSONType配置autoTypeCheckHandler的方法,比如:
来源:https://github.com/alibaba/fastjson/wiki/fastjson_safemode
WuKong静态软件安全测试工具
WuKong是一款国产信创SAST产品,采用自主专利技术的程序分析引擎,多种创新性的静态分析技术,结合深度学习和人工智能等多种方法,能够对软件代码进行全方位的 安全扫描和安全分析。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2021-06-01 代码安全 | 第二十五期:数组声明为public final static缺陷
2021-06-01 代码安全 | 第二十四期:数字类型的不正确转换漏洞