Fastjson autoType 防御演进:从 checkAutoType 到 safeMode
Fastjson autoType 防御演进从 checkAutoType 到 safeMode写在前面前面几篇都在讲“怎么绕”–1.2.24 裸奔、1.2.41 前后缀、1.2.47 缓存、1.2.80 Throwable。这篇换个视角站在官方这边看 fastjson 从 1.2.25 到 1.2.68 是怎么一步步把 autoType 堵起来的以及为什么最后不得不祭出safeMode。把防御演进串一遍你会发现一条清晰的轨迹黑名单 - 哈希黑名单 - 修缓存 - safeMode。每一步都是被绕过倒逼出来的而每一步的局限也正好对应前面某篇的绕过。防御梳理篇非单个漏洞不设 CVE 行。纯源码无截图。一、1.2.25三道防线1.2.24 裸奔之后1.2.25 一次性上了三道防线默认关 autoTypeParserConfig.autoTypeSupport false。checkAutoType 黑名单loadClass之前插入类型校验。明文前缀黑名单denyListstartsWith。// 1.2.25 parseObject 分支对比 1.2.24 的直接 loadClassClass?clazzconfig.checkAutoType(typeName,null);// ★ 先过校验// 通过才 loadClass这三道防线对应了三个攻击面开关、校验函数、黑名单内容。后面每被绕一次官方就补其中一道。二、1.2.42黑名单哈希化1.2.41 的L前缀绕过根因是startsWith匹配原始串、loadClass 却翻译类名。1.2.42 一边修这个剥L再查一边把明文黑名单改成哈希防逆向// 1.2.42明文 denyList - 哈希 denyHashCodeslonghashTypeUtils.fnv1a_64(className);for(inti0;idenyHashCodes.length;i){if(hashdenyHashCodes[i])throw...;}明文类名不再出现在 jar 里逆向成本上升。但哈希只是换了比对方式本质还是黑名单–枚举坏值防不住未知。1.2.43 的LL双写很快又绕了只剥一层L的修复不彻底。三、1.2.48修缓存投毒1.2.47 的缓存绕过根因是 checkAutoType “先查缓存、后查黑名单”且 MiscCodec 用cachetrue把用户输入的类塞进缓存。1.2.48 从两头堵// ① MiscCodec 不再写缓存cache 改 falseTypeUtils.loadClass(strVal,classLoader,false);// ② checkAutoType 黑名单前置先查黑名单再查缓存if(autoTypeSupport||expectClassnull){longhashfnv1a_64(className);for(inti0;idenyHashCodes.length;i){if(hashdenyHashCodes[i])throw...;// ★ 黑名单前置}}Class?clazzTypeUtils.getClassFromMapping(typeName);// 再查缓存这步把“校验顺序”和“缓存写入”两个根因都修了。但黑名单本身仍在–只要不开 safeMode后续仍可能被新姿势绕1.2.80 就是。四、1.2.68safeMode 终结技绕过一次次打脸后1.2.68 终于上了根本性方案safeMode。它的逻辑简单到粗暴–不再区分好类坏类直接不认type// 1.2.68 checkAutoType 顶部publicClass?checkAutoType(StringtypeName,Class?expectClass){if(safeMode){thrownewJSONException(safeMode not support autoType: typeName);}...}开启方式ParserConfig.getGlobalInstance().setSafeMode(true);safeMode 之所以是“终结技”因为它改变了防御模型模型逻辑局限黑名单1.2.25~1.2.66枚举坏类其余放行新坏类/绕过姿势层出不穷safeMode1.2.68一律不放行type牺牲 autoType 功能但本就该禁黑名单是“默认允许禁止坏值”safeMode 是“默认禁止”。前者永远追着攻击者跑后者一劳永逸–代价是 autoType 功能没了但 autoType 本就是 RCE 温床这个代价值。五、演进时间线1.2.24 autoType 裸奔(无校验) ── CVE-2017-18349 1.2.25 checkAutoType 明文黑名单 关autoType 三道防线 1.2.41 L 前缀绕过 ── 校验/加载不一致 1.2.42 黑名单哈希化 修L(只剥一层) 1.2.43 LL 双写绕过 - 直接拒 L/[ 前缀 1.2.47 缓存绕过(无需autoType) ── 校验顺序漏洞 1.2.48 修缓存(cachefalse 黑名单前置) 1.2.68 ★ safeMode(默认false) ── 终结技,但需手动开 1.2.80 Throwable expectClass 绕过 ── safeMode未开时的旁路 1.2.83 收窄 expectClass一条规律每一版黑名单都被绕每一次绕过都修在“根因”顺序、一致性、旁路直到 safeMode 把根–“允许加载任意类”–整个砍掉。六、为什么 safeMode 是唯一正解回看整条演进黑名单路线失败的根因是它试图在“允许任意类加载”的前提下挑出危险类。但“任意类加载”本身就是 RCE 的全部前提–攻击者只要找到一个你没列进黑名单的危险类或绕过匹配的姿势就赢了。这是个不对称博弈防御要枚举全攻击只要找一个漏。safeMode 之所以赢是它退出了这个博弈–不再尝试分辨好坏直接禁掉 autoType。这印证了安全设计的一条铁律默认安全default deny 黑名单default allow deny list。fastjson 用了从 1.2.25 到 1.2.68、四十多个版本、无数次打脸才走完从“黑名单”到“默认禁止”这条路。而这个教训1.2.24 时代就埋下了–autoType 这个“灵活还原任意对象”的功能从设计上就是危险的后面所有的补丁都是在给这个设计原罪打补丁。七、给使用者的建议开 safeModeParserConfig.getGlobalInstance().setSafeMode(true)或升级到 fastjson2默认安全。别开 autoType业务没强需求就别setAutoTypeSupport(true)开了等于自废武功。升级1.2.83 以上修了 expectClass 旁路fastjson2 重写默认安全。WAF 拦type只能当补充挡不住变种别依赖。参考fastjson GitHubhttps://github.com/alibaba/fastjson系列漏洞篇1.2.24 autoType 分析、1.2.41-43 黑名单绕过、1.2.47 缓存绕过、1.2.80 Throwable 绕过

相关新闻

AutoCAD LISP实现散线外轮廓自动查找:算法原理与工程实践

AutoCAD LISP实现散线外轮廓自动查找:算法原理与工程实践

在CAD图纸处理中,我们常常会遇到由大量散乱线段构成的图形,需要快速、准确地找出其最外侧的边界,即外轮廓。无论是为了计算面积、生成加工路径,还是进行图纸规范化,手动描绘外轮廓都极其耗时且容易出错。本文将深入探讨…

2026/10/17 5:40:15 阅读更多 →
VSCode Python调试与运行:launch.json与settings.json参数配置全解

VSCode Python调试与运行:launch.json与settings.json参数配置全解

1. 项目概述:为什么我们需要关注VSCode的Python参数调试与运行? 如果你用VSCode写Python,大概率遇到过这个场景:写了个脚本,需要从命令行接收几个参数才能跑起来,比如 python script.py --input data.csv …

2026/10/17 5:40:17 阅读更多 →
基于FPGA的AM调制系统实现:从数字信号处理到硬件设计实战

基于FPGA的AM调制系统实现:从数字信号处理到硬件设计实战

1. 从零到一:为什么选择FPGA来实现AM调制?如果你对无线电通信或者数字信号处理有点兴趣,大概率听说过“调制”这个词。简单说,调制就是把我们要传递的信息(比如一段音乐、一段语音),“加载”到一…

2026/10/17 5:43:16 阅读更多 →

最新新闻

从像素到决策:FlappyBird游戏AI的CNN网络设计与PyTorch实现

从像素到决策:FlappyBird游戏AI的CNN网络设计与PyTorch实现

1. 从像素到决策:为什么这个小游戏需要CNN而不是全连接网络很多人第一次给FlappyBird写AI逻辑时,第一反应是"状态就几个数字,用全连接网络不就行了"。我一开始也是这么想的,用小鸟的y坐标、速度、到上下水管的距离这几个…

2026/10/17 12:55:10 阅读更多 →
ETL设计实战:ODS层数据质量管控与清洗流水线构建

ETL设计实战:ODS层数据质量管控与清洗流水线构建

简介:本资源是一份面向数据工程师、BI开发人员及ETL初学者的系统性实践指南,聚焦ETL核心环节——数据抽取、清洗与转换的设计原理与落地要点。文档深入剖析ODS层数据抽取策略(含同构/异构数据库链接、文件类数据导入、增量更新机制&#xff0…

2026/10/17 12:55:10 阅读更多 →
算法竞赛入门经典例题答案拆解:从WA到AC的完整链路与避坑指南

算法竞赛入门经典例题答案拆解:从WA到AC的完整链路与避坑指南

简介:这份资源是《算法竞赛入门经典(第二版)》例题答案与配套代码合集,面向准备ACM/ICPC等算法竞赛的初学者与进阶选手,帮助读者对照书中例题检验思路、补齐实现细节。压缩包共224个文件,以191个cpp源码为主…

2026/10/17 12:55:10 阅读更多 →
RoboDojo榜首Astra:Physical RSI闭环如何让机器人自我进化

RoboDojo榜首Astra:Physical RSI闭环如何让机器人自我进化

1. 从RoboDojo榜单说起:一个三个月团队凭什么压过巨头RoboDojo这个榜单在机器人圈子里不算大众,但在做具身智能和机器人策略评测的人眼里,它的分量不轻。它不像某些跑分榜那样只看单一任务的完成率,而是把机器人放进一整套连续任务…

2026/10/17 12:55:10 阅读更多 →
Oracle 11g 单机 DBUA 升级 19c 实战手册:步骤、避坑与验证

Oracle 11g 单机 DBUA 升级 19c 实战手册:步骤、避坑与验证

简介:这份《Oracle 11g 到 19C 数据库升级详尽指导手册》面向具备一定运维能力的数据库管理员(DBA),聚焦于使用 DBUA(Database Upgrade Assistant)工具将 Oracle 11g 安全迁移至 19C 的完整流程。内容涵盖前…

2026/10/17 12:55:10 阅读更多 →
MATLAB实现Elman神经网络电力负荷预测:时序建模与工程实践

MATLAB实现Elman神经网络电力负荷预测:时序建模与工程实践

1. 项目概述与核心需求解析电力负荷预测这个题目,在电力系统里是老生常谈,但真正把它做好的人不多。我接触过不少相关项目,也见过很多人拿历史负荷数据直接塞进神经网络里就跑,结果训练集误差看着挺漂亮,一到验证集就原…

2026/10/17 12:54:09 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →