Basic Java Deserialization (ObjectInputStream, readObject)
In questo POST verrà spiegato un esempio utilizzando java.io.Serializable
.
Serializable
L'interfaccia Java Serializable
(java.io.Serializable
è un'interfaccia marker che le tue classi devono implementare se devono essere serializzate e deserializzate. La serializzazione degli oggetti Java (scrittura) viene eseguita con ObjectOutputStream e la deserializzazione (lettura) viene eseguita con ObjectInputStream.
Vediamo un esempio con una classe Person che è serializzabile. Questa classe sovrascrive la funzione readObject, quindi quando qualunque oggetto di questa classe è deserializzato, questa funzione verrà eseguita.
Nell'esempio, la funzione readObject della classe Person chiama la funzione eat()
del suo animale domestico e la funzione eat()
di un Cane (per qualche motivo) chiama un calc.exe. Vedremo come serializzare e deserializzare un oggetto Person per eseguire questa calcolatrice:
Il seguente esempio è tratto da https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Conclusione
Come puoi vedere in questo esempio molto semplice, la "vulnerabilità" qui appare perché la funzione readObject sta chiamando altre funzioni vulnerabili.
Last updated