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/8/8 12:17:45 阅读更多 →
VSCode Python调试与运行:launch.json与settings.json参数配置全解

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

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

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

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

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

2026/8/7 9:24:14 阅读更多 →

最新新闻

Python 玩转企微协议:朋友圈、标签与邀请确认等高阶接口实战

Python 玩转企微协议:朋友圈、标签与邀请确认等高阶接口实战

​​QiWe开放平台 个人名片 API驱动企微外部群自动化,让开发更高效 官方站点:https://www.qiweapi.com 对接通道:进入官方站点联系客服 团队定位:企微生态深度服务,专注 APIRPA 融合技术方案 真正的私域闭环不仅仅是群…

2026/8/8 13:08:58 阅读更多 →
APP上架全攻略:从合规自查到多平台提审避坑指南

APP上架全攻略:从合规自查到多平台提审避坑指南

1. 项目概述:为什么需要一份全面的上架指南? 每次准备把新开发的APP推向市场,最头疼的环节之一就是应对各大应用商店五花八门的审核规则。你可能遇到过这种情况:在华为应用市场审核顺利通过,到了小米应用商店却因为一个…

2026/8/8 13:08:58 阅读更多 →
Python 自动化运营:基于协议接口的企微外部群全生命周期管理

Python 自动化运营:基于协议接口的企微外部群全生命周期管理

​QiWe开放平台 个人名片 API驱动企微外部群自动化,让开发更高效 官方站点:https://www.qiweapi.com 对接通道:进入官方站点联系客服 团队定位:企微生态深度服务,专注 APIRPA 融合技术方案 外部群是私域运营的核心阵地…

2026/8/8 13:08:58 阅读更多 →
怎么把 Word 导出为纯图格式的 PDF?用不坑盒子每页转成图、排版锁死

怎么把 Word 导出为纯图格式的 PDF?用不坑盒子每页转成图、排版锁死

一份排好版的 Word 发出去,最怕两件事:一是对方电脑缺字体、Office 和 WPS 版本不一样,打开版式全乱;二是被人随手就把内容改了、把文字整段复制走。想两样一起堵住,就把它导成纯图格式的 PDF——每一页都是一张图&…

2026/8/8 13:08:58 阅读更多 →
Go 语言+RPA实现企微外部群消息自动化发送

Go 语言+RPA实现企微外部群消息自动化发送

​​QiWe开放平台 个人名片 API驱动企微自动化,让开发更高效 官方站点:https://www.qiweapi.com 对接通道:进入官方站点联系客服 团队定位:企微生态深度服务,专注 APIRPA 融合技术方案 大家好!做过企微开发…

2026/8/8 13:08:58 阅读更多 →
YOLO模型对比与LLM集成:构建鲁棒疲劳驾驶识别系统实践指南

YOLO模型对比与LLM集成:构建鲁棒疲劳驾驶识别系统实践指南

在实际的智能驾驶和工业安全监控场景中,疲劳驾驶识别是一个典型且关键的计算机视觉应用。单纯依赖单一的目标检测模型,往往难以应对复杂多变的真实环境,例如光照变化、驾驶员姿态多样、遮挡以及模型对不同疲劳特征(如闭眼、打哈欠…

2026/8/8 13:07:58 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →