Sécurité
Opération inverse de la sérialisation : reconstruire en mémoire un objet (types, champs, valeurs, références) à partir d'un flux d'octets ou de texte (JSON, XML, format binaire natif d'un langage). Elle devient une surface d'attaque dès que ce flux provient d'une source non fiable.
Principe : Le désérialiseur lit le flux, instancie les classes qu'il y trouve puis remplit leurs champs. Les formats natifs (Serializable en Java, pickle en Python, unserialize en PHP, BinaryFormatter en .NET) ne transportent pas seulement des données : ils indiquent aussi quels types instancier, ce qui revient à confier une partie du contrôle à l'auteur du flux.
Désérialisation non sûre : Un attaquant forge un flux qui instancie des classes déjà présentes dans l'application. Leurs méthodes appelées automatiquement (readObject, __reduce__, __wakeup, destructeurs) s'enchaînent en chaîne de gadgets jusqu'à l'exécution de code à distance. La faiblesse est cataloguée CWE-502. Vingt ans de métier apprennent qu'un flux sérialisé « purement interne » finit tôt ou tard dans un cookie, et de là dans un rapport d'audit.
Parades : Privilégier des formats de données pures (JSON validé par un schéma) plutôt que des objets natifs. Si le format natif est inévitable : filtrer les classes par liste blanche (ObjectInputFilter en Java), vérifier une signature ou un MAC du flux avant toute lecture, et ne jamais passer une entrée externe à pickle.
Explication de la marmotte
Imagine que tu déménages une armoire : tu la démontes, tu ranges les pièces dans un carton avec une notice, et à l'arrivée quelqu'un la remonte en suivant la notice. Les programmes font pareil avec leurs informations. Ils les mettent à plat pour les envoyer ou les stocker, puis les remontent à l'arrivée : ce remontage, c'est la désérialisation. Le souci, c'est que si la notice vient d'un inconnu, elle peut contenir des étapes piégées, du genre « au passage, ouvre la porte d'entrée ». Un monteur trop obéissant le fait sans discuter. C'est pour ça qu'on ne remonte jamais un carton reçu de n'importe qui sans vérifier la notice.
