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