Fastjson反序列化远程代码执行漏洞产生原因及修复建议

Fastjson反序列化远程代码执行漏洞产生原因及修复建议
最新回答
醒来后我哭笑

2022-11-22 14:20:16

Fastjson反序列化远程代码执行漏洞产生原因及修复建议

一、漏洞产生原因

Fastjson是阿里巴巴的开源JSON解析库,因其解析速度快且中文文档全面,在国内被广大开发人员广泛应用。然而,Fastjson在反序列化过程中存在安全隐患。具体来说,Fastjson使用黑白名单机制来防御反序列化漏洞,但允许用户在输入的JSON字符串中通过“@type”键对应的value指定任意反序列化类名。在特定条件下,攻击者可以绕过默认的autoType关闭限制,利用Fastjson的Gadget(一种利用特定类进行攻击的技术)执行远程代码,从而实现对远程服务器的攻击。

二、受影响的版本

在特定依赖存在的情况下,Fastjson的≤1.2.80版本均受到此漏洞的影响。

三、漏洞等级

该漏洞的风险评级为高危。一旦攻击者成功利用此漏洞,将可能对远程服务器造成严重的安全威胁。

四、官方修复方案

针对Fastjson反序列化远程代码执行漏洞,官方提供了以下修复方案:

  1. 升级到1.2.83版本

    从源代码层面来看,1.2.83版本删除了很多白名单对应的hash,并增强了checkAutoType方法的校验逻辑,添加了新的校验包含mask和autoTypeSupport,用于规避未经验证的autoType注入。

    升级到该版本后,可以显著降低被攻击的风险。

  2. 开启safeMode配置(适用于1.2.68到1.2.80版本)

    在1.2.68版本中,Fastjson增加了safeMode的支持。当safeMode打开后,完全禁用autoType,从而杜绝反序列化Gadgets类变种攻击。

    可以通过以下三种方式配置safeMode:

    在代码中配置:ParserConfig.getGlobalInstance().setSafeMode(true);

    加上JVM启动参数:-Dfastjson.parser.safeMode=true(如果有多个包名前缀,用逗号隔开)

    通过fastjson.properties文件配置:在类路径下创建fastjson.properties文件,并添加fastjson.parser.safeMode=true

    在1.2.68之后的版本,提供了AutoTypeCheckHandler扩展,可以自定义类接管autoType,通过ParserConfig#addAutoTypeCheckHandler方法注册。

  3. 判断并避免使用autoType

    检查序列化的代码中是否用到了SerializerFeature.WriteClassName,这种使用方式会产生“@type”,从而可能引发反序列化漏洞。

    在fastjson 1.2.71版本中,提供了通过JSONType配置autoTypeCheckHandler的方法,可以进一步增强安全性。

总结

Fastjson反序列化远程代码执行漏洞是一个严重的安全隐患,但通过升级到最新版本或开启safeMode配置,可以有效降低被攻击的风险。同时,开发人员应仔细检查代码中的序列化逻辑,避免使用可能引发漏洞的SerializerFeature.WriteClassName等特性。此外,定期使用专业的静态软件安全测试工具(如WuKong)对代码进行安全扫描和分析,也是预防此类漏洞的重要手段。

以上图片展示了Fastjson安全配置和JSONType配置autoTypeCheckHandler的示例,供开发人员参考。