大家好,我是R哥。

Fastjson 最近又爆出严重安全漏洞:

https://github.com/alibaba/fastjson2/wiki/Security-Advisory:-Remote-Code-Execution-in-fastjson-1.2.68%E2%80%931.2.83

还是严重等级,Fastjson 这是修不完的漏洞啊。。

Fastjson 是阿里巴巴开源的高性能 Java JSON 序列化/反序列化库,广泛用于 Java 对象与 JSON 之间的相互转换。Fastjson 1.x 版本已于 2024 年停止维护,当前最新版本为 2.0.64

这次的问题,主要出在 Fastjson 的反序列化机制上。

简单来说,如果项目使用的是默认配置,没有开启 SafeMode,同时攻击者又能控制传给 Fastjson 的 JSON 数据,就有机会构造一段恶意内容,利用 Fastjson 自己的反序列化逻辑,最终执行任意代码。

比较麻烦的是,这次漏洞和以前不太一样。

以前很多 Fastjson 漏洞都需要依赖某些特定的 gadget 类,所以把这些危险类删掉或者禁掉,还能起到一定的防护作用。

但这次属于 “gadget-free” 的利用方式,也就是说,它不需要依赖这些特定类就能完成攻击。

所以,过去那种靠删除危险类来规避风险的方法,这次基本就不管用了。

受影响版本

条件 说明
fastjson 版本 1.2.68 – 1.2.83
配置 AutoType OFF + SafeMode OFF(即默认配置
部署方式 Spring Boot 可执行 fat-jar
JDK 8 / 11 / 17 / 21 均验证
Spring Boot 2.x / 3.x / 4.x 均验证
入口 JSON.parseJSON.parseObject(String)JSON.parseObject(String, Class) 均可达

主要影响的是 Spring Boot 可执行 fat-jar 包 部署方式,Spring Boot 项目赶紧自查。。

Fastjson 2.x 默认配置不受影响,fastjson2 从架构层面已经规避了这次漏洞。

Fastjson 2.x 不再通过用户可控的类名进行资源探测,也不会因为 @JSONType 注解绕过类型校验。同时,类型解析采用白名单优先机制,只有明确允许的类型才能通过。

另外,fastjson2 默认关闭 autoTypeSupportAutoType 也已经被废弃并标记了安全风险。

修复建议

对于 Fastjson 1.x,建议优先升级到 1.2.84,如果暂时无法升级,也可以启用 SafeMode,或者切换到 noneautotype 版本。

长期来看,更推荐直接迁移到 fastjson2fastjson2 从架构层面已经规避了这次漏洞,而且默认配置更安全。

fastjson2 也需要注意的是:

  • 不要显式开启已经废弃的 SupportAutoType
  • 如果确实需要 autoType,使用 ContextAutoTypeBeforeHandler 配置严格白名单。

所以,Fastjson 1.x 能升级就升级到 1.2.84,最好迁移 fastjson2,fastjson2 默认不受此次漏洞影响。

庆幸,Spring Boot 默认使用 Jackson 作为 JSON 序列化和反序列化框架,并不依赖 Fastjson,我个人也没有使用 Fastjson,不然会修不完的漏洞。

如果你们 Spring Boot 项目用到了 Fastjson,赶紧自查升级吧。

好了,今天的分享就到这里了,后续R哥也会继续关注并分享更多的 Java 技术资讯和干货,关注公众号Java技术栈第一时间推送。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注