Basic Java Deserialization (ObjectInputStream, readObject)
En este POST se explicará un ejemplo usando java.io.Serializable
.
Serializable
La interfaz Serializable
de Java (java.io.Serializable
es una interfaz marcadora que tus 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 Person 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 Person 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 Person 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.
Última actualización