界: Code Quality
代码质量不佳会导致不可预测的行为。对于用户来说,通常表现为可用性差。对于攻击者来说,提供了以意外方式对系统施加压力的机会。
Code Correctness: readObject() Invokes Overridable Function
Abstract
类中的
readObject()
方法会调用可能被覆盖的函数。Explanation
在反序列化过程中,由于
示例 1:以下
如果函数
readObject()
充当构造函数,因此到此函数终止时,对象初始化才会完成。因此,如果 Serializable
类的 readObject()
函数调用了可覆盖的函数,则在对象尚未完成初始化之前,可能会提供对象状态的覆盖方法访问权限。示例 1:以下
readObject()
函数调用了可覆盖的方法。
...
private void readObject(final ObjectInputStream ois) throws IOException, ClassNotFoundException {
checkStream(ois);
ois.defaultReadObject();
}
public void checkStream(ObjectInputStream stream){
...
}
如果函数
checkStream()
和其封装类并非 final
和公共字段,则意味着该函数是可覆盖的,这意味着攻击者可以覆盖 checkStream()
函数,以便在反序列化过程中访问对象。References
desc.structural.java.code_correctness_readobject_invokes_overridable_function