Reino: Code Quality
Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.
Code Correctness: readObject() Invokes Overridable Function
Abstract
El método
readObject()
de la clase llama a una función que puede anularse.Explanation
Durante la deserialización,
Ejemplo 1: la siguiente función
Como la función
readObject()
actúa como un constructor, por lo que la inicialización del objeto no se completa hasta que finaliza esta función. Así, cuando una función readObject()
de una clase Serializable
llama a una función que se puede sobrescribir, puede permitir que el método de sobrescritura acceda al estado del objeto antes de que se inicialice por completo.Ejemplo 1: la siguiente función
readObject()
llama a un método que se puede sobrescribir.
...
private void readObject(final ObjectInputStream ois) throws IOException, ClassNotFoundException {
checkStream(ois);
ois.defaultReadObject();
}
public void checkStream(ObjectInputStream stream){
...
}
Como la función
checkStream()
y su clase envolvente no son final
y públicas, la función se puede sobrescribir y un atacante puede sobrescribir la función checkStream()
para tener acceso al objeto durante la deserialización.References
desc.structural.java.code_correctness_readobject_invokes_overridable_function