【发布时间】:2016-04-16 16:24:30
【问题描述】:
我在 Java 的 CERT 安全编码标准中遇到了这条规则。 Heap Pollution。我知道这会导致程序在运行时抛出异常,但我不明白这会如何导致像 dos 之类的安全问题。有人能解释一下攻击者可以利用堆污染的场景吗?
【问题讨论】:
标签: java security heap-pollution
我在 Java 的 CERT 安全编码标准中遇到了这条规则。 Heap Pollution。我知道这会导致程序在运行时抛出异常,但我不明白这会如何导致像 dos 之类的安全问题。有人能解释一下攻击者可以利用堆污染的场景吗?
【问题讨论】:
标签: java security heap-pollution
攻击者需要能够创建任意对象。例如,如果您公开 Java 序列化,这是可能的。您可以从 Java 序列化构造对象,该对象在泛型术语中是无效的,因此可能导致异常发生。
但是,还有更严重的问题需要担心,例如反序列化对象可能会以非预期的方式执行代码。不幸的是,一些通用库允许这样做。例如http://www.darkreading.com/informationweek-home/why-the-java-deserialization-bug-is-a-big-deal/d/d-id/1323237
【讨论】:
理论上参数化类型可以被来自不受信任来源的受信任代码接受(可以通过序列化,但也可以是不受信任的代码)。理论上,间接传递的值在使用通用超类型(值得注意的toString(可能有意外的转义字符或可能更改值)和equals(可能是谎言或恶意实现可能会更改参数对象)上的方法调用时可能表现不同) .
实际上这不会发生。 Java 库参数化类型本身通常是不可信的。不可信对象的可信参数化类型并不常见,并且在使用它们的地方通常会隐式检查强制转换,即使使用来自 Object 的方法也是如此。
【讨论】: