Basic Java Deserialization (ObjectInputStream, readObject)
Dans ce POST, un exemple utilisant java.io.Serializable
va être expliqué.
Serializable
L'interface Java Serializable
(java.io.Serializable
) est une interface de balisage que vos classes doivent implémenter si elles doivent être sérialisées et désérialisées. La sérialisation des objets Java (écriture) est effectuée avec ObjectOutputStream et la désérialisation (lecture) est effectuée avec ObjectInputStream.
Voyons un exemple avec une classe Personne qui est sérialisable. Cette classe écrase la fonction readObject, donc lorsque n'importe quel objet de cette classe est désérialisé, cette fonction va être exécutée.
Dans l'exemple, la fonction readObject de la classe Personne appelle la fonction manger()
de son animal de compagnie et la fonction manger()
d'un chien (pour une raison quelconque) appelle un calc.exe. Nous allons voir comment sérialiser et désérialiser un objet Personne pour exécuter cette calculatrice :
L'exemple suivant provient de https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Conclusion
Comme vous pouvez le voir dans cet exemple très basique, la "vulnérabilité" ici apparaît parce que la fonction readObject appelle d'autres fonctions vulnérables.
Last updated