Fastjson 自查查什么
Fastjson 的历史问题集中在 autoType 机制:反序列化时会根据输入中的类型信息加载类,配置不当会让攻击者构造的类型被实例化。自查三件事:依赖的实际版本、autoType 的当前状态(是否开启、是否有白名单)、以及是否已启用安全模式。这些属于配置与依赖层面的核查,可以在不改动业务的前提下完成。
基本信息
| 适用平台 | Java 应用(Spring Boot、Dubbo、消息消费端均常见) |
|---|---|
| 核查项 | 依赖版本、autoType 开关、白名单配置、安全模式 |
| 配置位置 | 代码中的解析入口、JVM 启动参数、依赖管理文件 |
| 处置原则 | 升级到维护中的安全版本,并按业务评估启用安全模式 |
典型使用场景
- Java 应用组件风险盘点中的反序列化项核查
- 排查历史版本依赖是否仍在生产环境运行
- 新老系统共用同一依赖时的版本收敛评估
- 消息中间件消费端反序列化配置的安全性检查
- 为升级改造提供依赖清单与影响面说明
依赖与配置清点
依赖与配置清点
mvn dependency:tree | grep -i fastjson # Maven 项目依赖树(Windows 下可改用 findstr)
find /opt -name 'fastjson*.jar' 2>/dev/null # 部署目录中实际存在的 jar,包含未声明的传递依赖
grep -rIn 'fastjson.parser.safeMode\|autoTypeSupport' /opt/apps 2>/dev/null | head # 查找安全模式与 autoType 相关配置
# 记录:应用名、依赖版本、配置状态、是否可通过升级或配置收敛检查项与处置
| 检查项 | 风险状态 | 处置方向 |
|---|---|---|
| 依赖版本 | 停留在停止维护的分支 | 升级到维护中的版本并对齐依赖管理 |
| autoType 状态 | 默认放行或白名单过宽 | 关闭不必要的能力,收紧白名单 |
| 安全模式 | 未启用且业务不依赖 autoType | 按评估结果启用并观察兼容性 |
| 解析入口 | 对外接口直接解析用户输入 | 限制可解析类型与请求来源 |
| 传递依赖 | 多个组件各自引入不同版本 | 统一版本,避免低版本被优先加载 |
升级前先评估反序列化行为变化对业务的影响:部分业务依赖特定版本的兼容行为,建议在测试环境用真实报文回归后再上线。
自查以配置与依赖清单为主,不需要构造利用载荷:能在不触碰业务数据的前提下给出风险状态,才是这类核查的正确做法。