堆污染如何导致安全漏洞

时间:2016-04-16 16:24:31

标签: java security heap-pollution

我在CERT安全编码标准Java中遇到过这个规则。 Heap Pollution。我知道这可能会导致程序在运行时抛出异常,但我无法理解这可能会导致像dos或类似的安全问题。有人可以解释攻击者可以利用堆污染的情况吗?

2 个答案:

答案 0 :(得分:2)

攻击者需要能够创建任意对象。例如,如果您公开Java Serialization,则可以这样做。您可以从Java序列化中构造对象,该对象在术语sof泛型中是无效的,因此可能导致异常发生。

然而,还有更严重的问题需要担心,例如反序列化可能以非预期方式执行代码的对象。不幸的是一些常见的库允许这样例如http://www.darkreading.com/informationweek-home/why-the-java-deserialization-bug-is-a-big-deal/d/d-id/1323237

答案 1 :(得分:1)

理论上参数化类型可以被来自不受信任来源的可信代码接受(可以通过序列化,但也可以是不受信任的代码)。理论上,间接传递的值在使用常见超类型上的方法调用时可能会有不同的行为(值得注意的toString(可能有意外的转义字符或可能会更改值)和equals(可能是谎言或恶意实现可能会改变论证对象))。

在实践中,这不会发生。 Java库参数化类型本身通常不值得信任。可信参数化类型的不可信对象是不常见的,并且在使用它们的地方,即使使用Object中的方法,通常也会进行隐式检查转换。