Basic Java Deserialization (ObjectInputStream, readObject)
En esta PUBLICACIÓN se va a explicar un ejemplo utilizando java.io.Serializable
.
Serializable
La interfaz Java Serializable
(java.io.Serializable
es una interfaz de marcador que sus clases deben implementar si van a ser serializadas y deserializadas. La serialización de objetos Java (escritura) se realiza con el ObjectOutputStream y la deserialización (lectura) se realiza con el ObjectInputStream.
Veamos un ejemplo con una clase Persona que es serializable. Esta clase sobrescribe la función readObject, por lo que cuando cualquier objeto de esta clase es deserializado, esta función se va a ejecutar.
En el ejemplo, la función readObject de la clase Persona llama a la función eat()
de su mascota y la función eat()
de un Perro (por alguna razón) llama a un calc.exe. Vamos a ver cómo serializar y deserializar un objeto Persona para ejecutar esta calculadora:
El siguiente ejemplo es de https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Conclusión
Como puedes ver en este ejemplo muy básico, la "vulnerabilidad" aquí aparece porque la función readObject está llamando a otras funciones vulnerables.
Last updated