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