CVE-2016-2173 Spring AMQP 中的远程代码执行
危急 | 2016 年 4 月 11 日 | CVE-2016-2173
描述
org.springframework.core.serializer.DefaultDeserializer 类不对反序列化的对象进行白名单验证。通过提供一个经过精心构造的序列化对象,例如 Chris Frohoff 的 Commons Collection gadget,可以实现远程代码执行。
受影响的 Spring 产品和版本
缓解措施
受影响版本的用户应采取以下缓解措施
- 引用的类 (DefaultDeserializer) 不会自动注册到任何 Spring 应用程序上下文中;用户在使用此类的过程中,如果处理来自不可信来源的对象,应像直接使用 ObjectInputStream 一样谨慎。
- Spring AMQP 提供了一个(可选的)消息转换器,该转换器可以使用此反序列化器;从 1.5.5 版本开始,该转换器现在可以配置一个可接受的反序列化包/类白名单。
- Spring AMQP 还提供了一个 SimpleMessageConverter,该转换器默认配置;它不使用此反序列化器,但内部使用 ObjectInputStream;它也可以配置一个包/类白名单。
- 建议用户在 RabbitMQ 环境中接收不可信数据时,不要使用 Java 序列化;如果必须使用,则应使用允许的对象配置转换器。
- 可能受到此漏洞影响的用户应升级到 Spring AMQP 1.5.5 或更高版本,并配置白名单。
致谢
漏洞发现者:Matthias Kaiser,Code White (www.code-white.com)
参考资料
历史
2016-Apr-11: 发布初始漏洞报告。