CVE-2017-4995:Jackson配置允许使用未知“反序列化gadget”执行代码
低 | 2017年6月8日 | CVE-2017-4995
描述
当配置为启用默认类型时,Jackson包含一个反序列化漏洞,可能导致任意代码执行。Jackson通过将已知的“反序列化gadget”列入黑名单来修复此漏洞。
Spring Security使用全局默认类型配置Jackson,这意味着如果满足以下所有条件,则可以通过之前的漏洞执行任意代码
- Spring Security的Jackson支持通过调用SecurityJackson2Modules.getModules(ClassLoader)或SecurityJackson2Modules.enableDefaultTyping(ObjectMapper)来实现
- Jackson用于反序列化不受信任的数据。Spring Security不使用Jackson进行反序列化,因此这是用户的显式选择。
- 类路径中存在一个未知(Jackson尚未将其列入黑名单)的“反序列化gadget”,允许执行代码
Jackson提供了一种黑名单方法来防御此类攻击,但是当Spring Security启用默认类型时,Spring Security应该积极主动地阻止未知的“反序列化gadget”。
受影响的Spring产品和版本
- Spring Security 4.2.0.RELEASE - 4.2.2.RELEASE
- Spring Security 5.0.0.M1
缓解措施
受影响版本的使用者应应用以下缓解措施
- 已修复此问题的版本包括:
- Spring Security:4.2.3.RELEASE+
- Spring Security:5.0.0.M2+
- 此修复程序确保默认情况下,只有显式映射的类才能被反序列化。使用显式映射类的效果是创建一个白名单,该白名单适用于所有受支持的Jackson版本。如果用户显式选择全局默认类型,则会恢复以前潜在的危险配置。
参考资料
历史记录
2017-06-08:发布初始漏洞报告