我对CVE-2015-4852 by Foxglove的编写和示例漏洞的理解是,您需要接收用户提供的序列化对象的代码和类别路径上存在的Apache commons-collections以便利用
有了这两件事,请求应该是可以制作的(尽管有些可能需要试验和错误/系统知识)。
作为I commented in this question about Spring Vulnerabilities,对于易受攻击的产品,它不必直接使用InvokerTransfomer
。有问题的对象由漏洞利用请求提供。所有"易受攻击的应用程序"要做的是提供commons-collections JAR和逻辑,它在用户提供的.readObject()
实例上调用InvokerTransformer
。
假设我正确地理解了这一点......基于从ObjectInputStream.readObject()
方法被调用的位置向后追踪来评估产品(您有源)是足够的,并得出结论该产品是如果流可以包含外部用户提供的对象的任何方式,则可能容易受到攻击?
答案 0 :(得分:2)
是的,如果有一条路径让不受信任的数据到达 ObjectStream.readObject()并且 InvokerTransformer 在类路径上,则产品或库容易受到攻击
如果您必须接受发往反序列化的不受信任的数据,那么您可以阻止包含 InvokerTransformer 的有效负载。您必须滚动自己的可序列化格式解析器或找到可以执行此操作的安全库。
另一个缓解措施是在一个单独的类加载器中反序列化, InvokerTransformer 无法访问。
远更好 - 正如@PhaedrusPhacdelm发现的那样 - 将反序列化的允许类列入白名单: http://fishbowl.pastiche.org/2015/11/09/java_serialization_bug/ http://www.ibm.com/developerworks/library/se-lookahead/