堆污染如何导致安全漏洞

How can Heap Pollution cause a security flaw

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

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

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

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

实际上这不会发生。 Java 库参数化类型本身通常是不可信任的。不受信任对象的可信任参数化类型并不常见,即使使用来自 Object.

的方法,通常也会在使用它们的地方进行隐式检查转换