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 di marcatura 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 qualsiasi oggetto di questa classe viene 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:
L'esempio seguente è tratto da https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Conclusion
Come puoi vedere in questo esempio molto semplice, la "vulnerabilità" qui si presenta perché la funzione readObject sta chiamando altre funzioni vulnerabili.
Last updated