Java 堆污染如何导致安全漏洞

Java 堆污染如何导致安全漏洞,java,security,heap-pollution,Java,Security,Heap Pollution,我在Java的CERT安全编码标准中遇到了这条规则。我知道这会导致程序在运行时抛出异常,但我不明白这怎么会导致dos之类的安全问题。有人能解释一下攻击者可以利用堆污染进行攻击的场景吗?攻击者需要能够创建任意对象。例如,如果公开Java序列化,这是可能的。您可以从Java序列化构造对象,而Java序列化在sof泛型术语中是无效的,因此可能导致异常发生 然而,还有更严重的问题需要担心,比如反序列化对象,这些对象可能会以非预期的方式执行代码。不幸的是,一些公共库允许这样做。e、 g.攻击者需要能够创建

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

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


然而,还有更严重的问题需要担心,比如反序列化对象,这些对象可能会以非预期的方式执行代码。不幸的是,一些公共库允许这样做。e、 g.

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


然而,还有更严重的问题需要担心,比如反序列化对象,这些对象可能会以非预期的方式执行代码。不幸的是,一些公共库允许这样做。e、 g.

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


实际上,这种情况不会发生。Java库参数化类型本身通常不可信。不受信任对象的可信任参数化类型并不常见,在使用这些类型的情况下,即使使用来自
对象的方法,也通常存在隐式检查强制转换。理论上,参数化类型可以被来自不受信任源的可信代码接受(可能是通过序列化,但也可能是不可信的代码)。理论上,当使用公共超类型(值得注意的
toString
(可能有意外的转义字符或可能更改值)和
等于时,间接传递的值的行为可能会有所不同(可能是谎言或恶意实现可能改变参数对象)

在实践中,这种情况不会发生。Java库参数化类型本身通常是不可信的。不可信对象的可信任参数化类型并不常见,在使用它们的地方,即使使用
对象
中的方法,也通常存在隐式的检查强制转换