CVE-2017-4995:Jackson 配置允许使用未知的“序列化 gadget”执行代码
低 | 2017 年 6 月 8 日 | CVE-2017-4995
描述
当配置为启用默认类型时,Jackson 存在一个反序列化漏洞,可能导致任意代码执行。Jackson 通过将已知的“反序列化 gadget”列入黑名单来修复此漏洞。
Spring Security 使用全局默认类型配置 Jackson,这意味着通过先前的漏洞,如果以下所有条件都成立,则可能执行任意代码:
- 通过调用 SecurityJackson2Modules.getModules(ClassLoader) 或 SecurityJackson2Modules.enableDefaultTyping(ObjectMapper) 来利用 Spring Security 的 Jackson 支持。
- Jackson 用于反序列化不受信任的数据。Spring Security 不使用 Jackson 进行反序列化,因此这是用户的明确选择。
- classpath 中存在一个未知的(Jackson 尚未列入黑名单的)允许执行代码的“反序列化 gadget”。
Jackson 提供了一种黑名单方法来防范此类攻击,但当 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:首次发布漏洞报告