Fastjson 1.2.80 autoType Throwable 异常类绕过分析
Fastjson 1.2.80 autoType Throwable 异常类绕过分析写在前面1.2.47 缓存绕过之后官方在 1.2.48 堵了缓存1.2.68 又祭出safeMode这把“终极武器”。但 safeMode 默认不开–只要用户没显式setSafeMode(true)autoType 这扇门就还留着缝。1.2.80 就是顺着这条缝用Throwable异常类配合expectClass机制完成了 autoType 在 safeMode 时代的最后一击。这篇拆expectClass这条常被忽略的路径看 Throwable 是怎么借它绕过黑名单的。纯源码分析无截图。一、漏洞简介漏洞组件Alibaba fastjson影响版本1.2.68 ≤ version ≤ 1.2.80safeMode 之后、1.2.83 修复前漏洞类型autoType 黑名单绕过Throwable expectClass导致反序列化 RCECVE无fastjson 后续绕过均未申请 CVE修复版本1.2.83收窄 expectClass 路径前提未开启 safeModesafeMode 默认 false根因checkAutoType 的expectClass分支在 autoTypeSupportfalse 时仍可加载 expectClass 的子类Throwable 的反序列化路径会把用户可控的类名以expectClassThrowable.class传入绕过黑名单二、1.2.68 safeMode开了才安全先澄清一个误区。1.2.68 引入的safeMode确实是 autoType 的终结技// ParserConfig.checkAutoType (1.2.68)publicClass?checkAutoType(StringtypeName,Class?expectClass){if(safeMode){thrownewJSONException(safeMode not support autoType: typeName);// 直接拒}...}开了 safeModetype一律不认什么绕过都没用。但它默认是 false要用户主动ParserConfig.getGlobalInstance().setSafeMode(true)。绝大多数项目没开–于是 autoType 仍在工作1.2.80 的绕过就是针对这种“没开 safeMode”的默认配置。三、expectClass被忽略的旁路checkAutoType 有个第二参数expectClass平时很少被注意publicClass?checkAutoType(StringtypeName,Class?expectClass)它的本意是当 fastjson 已经知道“这个字段期望的类型是 X”比如某个方法的参数类型是Throwable解析type时传入expectClassX允许加载 X 的子类。这是为正常多态反序列化设计的–比如字段声明的是Exception实际 JSON 里给个具体子类。关键源码1.2.68 ~ 1.2.80简化// checkAutoType (1.2.68核心分支)if(safeMode)throw...;// ① 黑名单仍查longhashfnv1a_64(className);for(inti0;idenyHashCodes.length;i){if(hashdenyHashCodes[i])throw...;}// ② expectClass 旁路★ 关键if(expectClass!null){if(expectClassObject.class||expectClass.isAssignableFrom(/* 待加载类 */)){// 走这条加载 typeName只要它是 expectClass 的子类就放行Class?clazzTypeUtils.loadClass(typeName,defaultClassLoader,false);if(clazz!nullexpectClass.isAssignableFrom(clazz)){returnclazz;// ★ 不强制 autoTypeSupport绕过}}}...注意第 ② 步只要expectClass不为 null且待加载类是它的子类就放行–这条路径不检查 autoTypeSupport。换句话说即使 autoType 关着只要能骗 fastjson 以一个非 null 的expectClass调 checkAutoType就能加载expectClass的任意子类只要不在黑名单。问题变成怎么让 fastjson 用expectClass某个宽泛类型去调 checkAutoType而且这个宽泛类型有“不在黑名单的危险子类”–Throwable 正好满足。四、Throwable 的反序列化路径fastjson 对Throwable/Exception有专门的处理ThrowableReader/ 异常类的 deserializer。当 JSON 里type是java.lang.Exception或 Throwablefastjson 走异常解析分支它会把 JSON 里下一个type具体异常类名以expectClass Throwable.class调 checkAutoType// ThrowableReader 解析异常对象简化StringexClassName/* 读到的第二个 type具体异常类名 */;Class?exClassparser.getConfig().checkAutoType(exClassName,Throwable.class);// ★ expectClassThrowable// - 命中第②步 expectClass 旁路加载 exClass只要它是 Throwable 子类且不在黑名单ObjectexexClass.newInstance();// 填字段异常类的 message、cause 等 setterpayload 雏形两段type{type:java.lang.Exception,type:com.xxx.MaliciousException,field:...}第一个typejava.lang.Exception进 Throwable 解析分支Throwable 本身不在黑名单。第二个typecom.xxx.MaliciousException被 ThrowableReader 以expectClassThrowable.class调 checkAutoType。命中 expectClass 旁路只要MaliciousException是 Throwable 子类且不在黑名单就放行加载。五、利用链需要一个 Throwable 子类 gadget绕过黑名单只是“能加载类”要 RCE 还得这个类有副作用。这里和前几篇不一样1.2.80 本身只提供“加载任意 Throwable 子类”的能力gadget 得自己找。常见的姿势找一个构造方法或 setter 里有 JNDI/反射/加载动作的 Throwable 子类通常在第三方库里。比如某些库的自定义异常在构造时会记录上下文、加载资源被挪用成触发点。典型 PoC 常结合 Groovy、Spring 等库里的特定异常类具体哪个类随依赖而变核心是“它是 Throwable 子类 有副作用”。typejava.lang.Exception - 进 Throwable 解析分支 └ 第二个 type某 Throwable 子类(不在黑名单) └ checkAutoType(name, Throwable.class) └ expectClass 旁路 - 加载该异常类(autoTypeSupport 不查) └ 实例化 setter/构造副作用 - RCE所以 1.2.80 的利用门槛比 1.2.24/1.2.47 高–它要目标 classpath 上有合适的 Throwable gadget。但“能绕过黑名单加载任意 Throwable 子类”这一步本身已是 autoType 防线的失守。六、修复1.2.83 收窄 expectClass1.2.83 的修复针对 expectClass 旁路对expectClass路径也加上更严格的校验收紧哪些 expectClass 允许走旁路或对 Throwable 这类宽泛基类的子类也过黑名单// 1.2.83 思路简化expectClass 旁路也要过黑名单if(expectClass!null){// 不再无条件放行子类先过黑名单longhashfnv1a_64(className);for(inti0;idenyHashCodes.length;i){if(hashdenyHashCodes[i])throw...;}// 且 expectClass 必须在允许的范围内如非 Object/Throwable 这种过宽基类...}同时官方再次强调真正可靠的修复是开启 safeMode。只要 safeMode 开着第 ② 步根本走不到checkAutoType 顶部就抛异常了expectClass 旁路无从发挥。七、小结1.2.80 这篇我们看到 autoType 防线在 safeMode 时代的最后一道裂痕旁路参数也是攻击面expectClass本是为多态设计的“信任通道”但只要它存在且不检查 autoTypeSupport就成了绕过黑名单的侧门。任何“为方便而开的信任通道”都要问它能不能被外部输入触发默认配置是安全水位线safeMode 默认 false意味着绝大多数用户其实没受保护。一个“要手动开才安全”的防御等于把安全责任推给用户–而用户多半不会开。gadget 可移植1.2.80 把“加载任意类”收窄到“加载任意 Throwable 子类”提高了门槛但没堵死。只要 classpath 上有合适的异常类 gadget仍可 RCE。至此 fastjson 的 autoType 绕过史–从 1.2.24 裸奔、1.2.41 前后缀、1.2.47 缓存、到 1.2.80 Throwable–就走完了。最后那篇防御演进我们看官方是怎么一步步把这些洞堵上、最终走向 safeMode 的。参考fastjson GitHubhttps://github.com/alibaba/fastjson系列前篇1.2.24 autoType 分析、1.2.41-43 黑名单绕过、1.2.47 缓存绕过

相关新闻

从菜鸟到大师:提示词优化的完整进阶指南

从菜鸟到大师:提示词优化的完整进阶指南

引言:为什么提示工程在2026年依然重要? 2025年,大语言模型已经成为人工智能领域的核心技术,它们能够理解和生成人类语言,执行复杂的认知任务。然而,要充分发挥这些模型的潜力,仅仅知道“怎么打…

2026/8/8 12:11:58 阅读更多 →
Fastjson autoType 防御演进:从 checkAutoType 到 safeMode

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 是怎么一步步把 …

2026/8/7 9:24:14 阅读更多 →
AutoCAD LISP实现散线外轮廓自动查找:算法原理与工程实践

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

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

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

最新新闻

本地数据可控 AI 助手 OpenClaw ·Windows端解压安装、初始化全流程拆解

本地数据可控 AI 助手 OpenClaw ·Windows端解压安装、初始化全流程拆解

⚠️别盲目安装!OpenClaw(龙虾 AI)Windows 部署排坑手册,全覆盖各类安装报错 本文基于 Windows 稳定版本 OpenClaw v2.9.0 撰写,适配 Win10、Win11 全系操作系统,整套整合压缩包搭建耗时控制在 5~10 分钟。…

2026/8/8 12:12:23 阅读更多 →
深度解析:如何通过 RPA 技术实现外部群聊的自动化管理

深度解析:如何通过 RPA 技术实现外部群聊的自动化管理

基于流程自动化协议,探索企业私域运营的高效技术路径 能力介绍 在当前的私域运营场景中,外部群聊(跨组织沟通)的自动化一直是个挑战。本文介绍的技术方案采用 RPA(机器人流程自动化) 核心逻辑&#xff0c…

2026/8/8 12:12:23 阅读更多 →
Java 工程师面试题 + 参考答案2026年大厂题目

Java 工程师面试题 + 参考答案2026年大厂题目

Java 工程师面试题 + 参考答案 ────────────────────────────────────────────────── 1. JDK、JRE、JVM 分别是什么?三者有什么关系? 参考答案: JVM 是 Java 虚拟机,负责执行字节码文件。 JRE 是 Java 运行环境,包含…

2026/8/8 12:12:23 阅读更多 →
Qt QLabel控件深度解析:从文本显示到富文本、图像与交互的全面应用

Qt QLabel控件深度解析:从文本显示到富文本、图像与交互的全面应用

1. QLabel控件:不只是显示文字的“标签” 在Qt的控件家族里,QLabel可能是最容易被新手“轻视”的一个。很多人第一眼看到它,觉得这不就是个显示几行文字的小部件吗?有什么好讲的?但在我十多年的Qt开发经历里&#xff0…

2026/8/8 12:12:23 阅读更多 →
2026 年企业邮箱系统选型攻略:5 款国内主流邮箱系统产品深度对比

2026 年企业邮箱系统选型攻略:5 款国内主流邮箱系统产品深度对比

在数字化转型全面深化的2026年,企业邮箱系统已从基础通信工具演变为企业信息化建设的核心枢纽。随着远程办公常态化、数据安全合规要求日益严格,选择一款适合自身业务发展的邮件系统成为企业决策者的重要课题。本文将深入对比分析U-Mail邮件系统、Corema…

2026/8/8 12:12:23 阅读更多 →
Unity多智能体避障:RVO2算法原理与工程实践详解

Unity多智能体避障:RVO2算法原理与工程实践详解

1. 项目概述:为什么RVO2是Unity智能体避障的“终极”选择? 如果你在Unity里做过RTS游戏、模拟城市或者任何需要大量NPC或单位移动的项目,大概率被“群体卡顿”和“鬼畜穿模”这两个问题折磨过。让几十上百个智能体(Agent&#xff…

2026/8/8 12:11:22 阅读更多 →

日新闻

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 阅读更多 →