FastJson最新反序列化漏洞分析
字数 1728 2025-08-27 12:33:37
FastJson反序列化漏洞深度分析与防御指南
1. 漏洞概述
FastJson是阿里巴巴开源的一款高性能JSON库,自2017年以来多次被发现存在反序列化漏洞。最新爆出的绕过方法可以通杀1.2.48版本以下所有版本,有传言在autotype开启的情况下甚至可以影响到1.2.57版本。
漏洞危害等级:严重
2. 影响版本
- 最初漏洞影响1.2.24及之前版本
- 1.2.42-45版本之间存在多次绕过
- 最新漏洞影响1.2.48以下所有版本(默认配置)
- 开启autotype情况下可能影响至1.2.57版本
3. 漏洞原理分析
3.1 漏洞利用思路
攻击者通过java.lang.Class将JdbcRowSetImpl类加载到map缓存,从而绕过autotype的检测。攻击通常分为两个阶段:
- 第一次请求:加载恶意类到缓存
- 第二次请求:执行恶意代码
3.2 技术细节
3.2.1 漏洞入口
漏洞入口在parse方法,调用链如下:
parse -> DefaultJSONParser.checkAutoType
关键代码:
clazz = this.config.checkAutoType(typeName, (Class)null, lexer.getFeatures())
3.2.2 autotype开启情况下的绕过
当autotype开启时,checkAutoType方法采用黑名单机制:
- 对类名进行hash后与denyHashCodes进行比对
- 黑名单中的类可以通过loadClass方法加载并返回,从而绕过检测
已知黑名单类参考:fastjson-blacklist
3.2.3 autotype关闭情况下的绕过
当autotype关闭时,checkAutoType方法采用白名单机制:
- 通过
getClassFromMapping尝试从缓存加载类 - 通过
deserializers查找类 - 如果都不存在,则抛出异常
攻击者利用Class通过deserializers.findClass加载,然后将JdbcRowSetImpl类加载进map中,在第二次请求时成功绕过检测。
3.3 最终利用链
加载JdbcRowSetImpl后,利用以下调用链实现RCE:
JavaBeanDeserializer.deserialze
-> FieldDeserializer.setValue
-> 通过反射调用setAutoCommit方法给属性赋值
-> JNDI connect
-> InitialContext.lookup
-> 请求攻击者的JNDI服务器下载并执行恶意代码
调用栈注意事项:
- 在Java 8u191及以上版本,需要结合Tomcat EL或LDAP绕过限制
- 8u191以下版本可以通过LDAP Reference绕过对RMI从远程Codebase加载Reference工厂类的限制
4. 漏洞修复方案
4.1 官方修复措施
在1.2.48版本中,修复措施包括:
- 在
loadClass时将缓存开关默认置为false,默认不能通过Class加载进缓存 - 将
Class类加入黑名单
4.2 推荐解决方案
- 升级FastJson:升级到最新1.2.58或更高版本
- 关闭autotype:采用默认的关闭autotype配置
5. 防御建议
- 严格输入验证:对所有JSON输入进行严格验证
- 最小权限原则:运行FastJson的应用程序应使用最小必要权限
- 网络隔离:限制应用程序的出站连接,防止JNDI/LDAP攻击
- Java环境加固:升级到最新Java版本(8u191以上),并应用相关安全补丁
- 监控与日志:实施严格的日志记录和监控,检测可疑的反序列化活动
6. 高级绕过技术参考
对于高版本Java环境中的JNDI注入绕过技术,参考:JNDI Manipulations RCE Restrictions and Bypass
7. 测试与验证
如需验证系统是否受影响,可以使用以下方法:
- 检查FastJson版本
- 检查autotype配置状态
- 使用已知无害的测试payload验证反序列化行为
注意:实际漏洞利用测试应在授权环境下进行,避免违反法律法规。
8. 相关资源
- FastJson官方安全公告:https://github.com/alibaba/fastjson/wiki/security_update_20170315
- FastJson黑名单项目:https://github.com/LeadroyaL/fastjson-blacklist
- JNDI注入限制与绕过:https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html