Java基础、中级、高级、架构面试资料

Fastjson 又炸了,爆出了核弹级漏洞

业余杂谈 herman 17浏览
公告:“业余草”微信公众号 AI 中转站提供免费体验,点击链接 https://unity2.ai/register?ref=3XTnndN2 进行访问,支持 Claude、ChatGPT、Gemini 等最新模型!关注业余草微信公众号,添加作者微信:xttblog2!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

最近 Fastjson 1.x 又被爆出了高达 9.0 分的核弹级漏洞,各大云厂商都发了通告。

然而,一小部分网友们,还只是会骂。

骂完了之后,发现 fastjson 1.x 生于 2012,卒于 2022,停更 4 年后的 2026 年依旧再挨骂。

很多人已经忘记了,开源不是慈善,但很多人把它当成了无限责任的免费售后服务。开源项目不欠任何人一个“永远维护”的承诺。

更何况,我们不应该太擅长做“评论家”,而太不习惯做“建设者”。

一颗迟到的“核弹”

2026 年 7 月 19 日,安全研究员 Kirill Firsov 在 Twitter 上扔下了一颗炸弹。Fastjson 1.x 末代版本(1.2.68–1.2.83)存在一个“无需任何 gadget 链”即可触发的远程代码执行漏洞

这不是 Fastjson 第一次出事了。从 1.2.24 到 1.2.47,从 autoType 绕过到黑名单绕过,Fastjson 的漏洞史几乎就是一部 Java 反序列化安全编年史。但这一次,情况格外刺眼。

  • 影响版本:1.2.66–1.2.83,涵盖了官方宣称的“最终安全版本” 1.2.83
  • 利用条件:默认配置即可触发,关闭 autoType 无效,绑定具体类型也无效
  • 危害等级:CVSS 9.8,Spring Boot FatJar + JDK 8 环境下可直接 RCE
  • POC 公开:披露次日即已有可利用代码在 GitHub 上流传

更现实和讽刺的是,Fastjson 1.x 早在 2024 年就已停止维护,官方最后一次发布 1.x 版本是 2022 年的 1.2.83。也就是说,这个被无数人当作“安全最终版”依赖了数年的版本,其实早已成了一具“尸体”了。

文章配图参见我的公众号:https://mp.weixin.qq.com/s/3w4COY6g7WoOOszjaqdTtg。

大型双标现场

漏洞曝光后,各大技术社区、微信群、知乎、脉脉、云厂商等渠道瞬间炸锅。我随手摘录几条高赞评论给大家看看。

  • Fastjson 这破玩意怎么还在用?早该扔进历史的垃圾堆了。
  • 阿里巴巴这么大的厂,开源个库就这么不负责任?
  • 用了这么多年,说停更就停更,我们的系统怎么办?
  • 又是 Fastjson,又是 RCE,国产开源真的不行。
  • 这么多条了,开源作者在干啥?
  • 写的这么垃圾,转写漏洞的吗?
  • 早知道我就不用了

这些吐槽有问题吗?

应该说是没有的。Fastjson 1.x 的安全债确实沉重,历史包袱也确实让人头疼。大家吐槽的心情我也能理解,但不能进行人身攻击呀。

更何况,吐槽解决不了问题呀。

我又翻了翻几个技术群的后续讨论,发现画风出奇一致:

  • 有人连夜写排查脚本,扫描公司所有项目的依赖版本。这是标准的行动派。
  • 有人紧急开启 SafeMode,先止血再想办法。这应该是一群务实派。
  • 但更多的人,在骂完之后,继续用着 1.2.83,继续等着好心人的补丁

要知道,Fastjson 1.x 已经停更两年了。官方早在 2024 年就明确宣布 1.x 仅做安全维护,并推荐所有用户迁移到 Fastjson 2.x。所以,等补丁的话,很可能是一场空,大概率永远不会来了。

最可怕是等靠要的心态

最可怕的不是漏洞,是“等靠要”心态,再加上人身攻击。

这次事件暴露了一个在中文技术社区里长期存在、但极少被正视的问题:“我只管白嫖,出了问题你必须负责修。你不修?那你就是烂,就是不负责任”。

我经常说救病于病情发作之前,Fastjson 1.x 是阿里巴巴开源的一个 JSON 解析库,免费开源Apache 协议。你下载它的时候,没有付过一分钱;你把它集成到价值千万的业务系统里的时候,没有签过一份 SLA;你遇到 bug 的时候,没有提交过一个 PR。

然而,当这个免费工具出了问题,你的第一反应是:官方为什么不修

我提原作者温少说一句,朋友们,这不是商业软件,没有 7×24 的客服热线,也没有“漏洞响应黄金 24 小时”的服务承诺。开源作者把代码放在 GitHub 上,已经履行了“分享”的义务。维护和修复,从来都不是他们的“必须”,而是社区的“共同责任”

更荒诞的是,这次漏洞的修复方案,官方其实早就给出来了:

方案难度效果
迁移到 Fastjson 2.x中等(需改依赖 + 部分 API 适配)根治,2.x 架构重写,不受此漏洞影响
开启 SafeMode极低(加一行 JVM 参数)缓解,彻底禁用 @type 自动加载
使用 noneautotype 版本低(换 Maven 坐标)缓解,编译时移除 AutoType 能力

这三个方案,没有一个需要你去 fork 代码、写补丁、发 PR。最难的“迁移到 2.x”,也不过是改改 pom.xml,批量替换一下 import 语句,跑一遍回归测试。

但即便如此,仍有大量开发者选择,先骂,再等,再看看

开源的搭便车困境

经济学里有个概念叫搭便车问题(Free-rider Problem)。就是说,公共资源的维护需要成本,但每个人都希望别人付出成本,自己坐享其成

开源软件就是最典型的“公共资源”。

Fastjson 的作者温少(高铁)和他的团队,在过去十几年里维护了这个被数百万项目依赖的库。他们修复了无数个漏洞,处理了无数个 issue,回应了无数个“为什么又出 bug”的质问。然后他们选择将精力投入到重新设计的 Fastjson 2.x 中,这不仅是技术演进,更是一种负责任的态度。与其在腐朽的架构上打补丁,不如给你一个更好的替代品

但社区的反应是什么?

  • 1.x 不维护了?那我们的老项目怎么办?你可以迁移,官方给了完整的迁移指南。
  • 迁移成本太高,我们没时间。那你当初选择深度绑定一个第三方库的时候,有没有考虑过技术债的风险?
  • 为什么不让 1.x 继续维护?因为维护需要人力,而人力需要资源。你既没有付费,也没有贡献代码,凭什么要求无限期的售后服务?

我这不是在替 Fastjson 洗地。1.x 的安全设计确实有历史局限,autoType 的反复修补更像是一场“打地鼠”游戏。但问题在于当官方已经给出了明确的退出路线(迁移到 2.x)时,继续使用 1.x 并拒绝升级,这个风险是谁的选择?

是你或你的前辈,也或者是团队自己的选择。

成熟的程序员

所以,作为一名技术人、程序员、编程爱好者,应该具备或建立什么样的认知呢?

我觉得应该具备下面几点。

  1. 接受开源 ≠ 无限责任。不要把开源作者当成你的外包团队。
  2. 技术债要还,而且越早还越便宜。技术债不会消失,只会利滚利。
  3. 建立“供应链(第三方或自有类库)安全”意识。
  4. 参与社区,哪怕只是一点点。不需要成为核心贡献者。发现一个 bug?提个 issue。用了一个好用的功能?在 GitHub 上点个 star,写篇博客分享。有能力修复?fork 之后提个 PR。开源社区的良性循环,靠的不是少数英雄的牺牲,而是大多数人的微小参与。

那些只吐槽不行动的人,那些用着免费软件却要求商业级 SLA 的人,那些出了问题第一时间甩锅而不是排查的人,他们很可能才是开源生态最大的消耗者。

最后

Fastjson 1.x 的漏洞,是一个技术问题,更是一个社区问题。

我们可以批评它的历史设计缺陷,可以讨论国产开源软件的安全文化,可以呼吁企业为开源维护者提供更多支持,因为这些讨论都有价值

友好的讨论都没问题,有问题的是那些进行人身攻击的,不知道说他们什么好了。

开源的精神不是“你给我修”,而是“我们一起让它变得更好”。行动,永远比吐槽更有力量。

开源社区不是魔法世界,没有免费的午餐,也没有无限责任的守护神。每一个使用开源软件的人,都是这个生态的一部分。你可以选择做一个只索取不付出的“搭便车者”,也可以选择成为一个让社区变得更好的参与者,但千万别只学会了进行人身攻击。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » Fastjson 又炸了,爆出了核弹级漏洞