0

我在 Java 的 CERT 安全编码标准中遇到了这条规则。堆污染。我知道这可能会导致程序在运行时抛出异常,但我不明白这会如何导致像 dos 之类的安全问题。有人可以解释攻击者可以利用堆污染的场景吗?

4

2 回答 2

2

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

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

于 2016-04-16T17:30:31.660 回答
1

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

在实践中,这不会发生。Java 库参数化类型本身通常是不可信的。不受信任对象的可信任参数化类型并不常见,并且在使用它们的地方,即使使用来自Object.

于 2016-04-16T18:46:09.633 回答