Deserialization Attack
hackingDéfinition
Les attaques de désérialisation exploitent le processus de conversion d'un objet sérialisé (stream de bytes) en objet en mémoire pour exécuter du code arbitraire ou manipuler la logique applicative. Quand une application désérialise des données provenant de sources non fiables (cookies, paramètres de requête, données de fichiers) sans validation, un attaquant peut fournir un stream de bytes malicieux qui déclenche des actions inattendues lors de la désérialisation. Le mécanisme exploite les 'gadget chains' : des séquences de méthodes magiques (constructeurs, destructeurs, méthodes toString, equals, etc.) disponibles dans les classes présentes dans le classpath de l'application qui, quand chaînées via le processus de désérialisation d'un objet malveillant, aboutissent à l'exécution de commandes OS. Des formats de sérialisation vulnérables incluent : la sérialisation Java native (streams binaires commençant par 0xaced0005), PHP serialize/unserialize, Python pickle, Ruby Marshal, et .NET BinaryFormatter. Chaque format a ses propres vulnérabilités et gadget chains. Des exploits célèbres incluent : Apache Commons Collections gadget chain (Java, permettant RCE sur de nombreux serveurs Java EE), PHP unserialize sur WordPress (CVE-2019-8942, RCE), Python pickle dans des APIs ML qui chargent des modèles via pickle.load(), et des RCE sur WebLogic, JBoss, Jenkins via la désérialisation Java. Des outils comme ysoserial (Java gadget chains generator), phpggc (PHP gadget chains), et notsoserial (Java deserialization filter testing) facilitent la génération de payloads et les tests.
Fonctionnement
Java deserialization avec ysoserial : java -jar ysoserial.jar CommonsCollections6 'touch /tmp/pwned' | base64 génère un payload Java sérialisé qui exécute la commande lors de la désérialisation. Si un paramètre de l'application accepte des objets Java sérialisés (base64), soumettre ce payload déclenche l'exécution. Détecter : les streams Java commencent par rO0AB en base64 (0xaced0005 en hex). Python pickle : import pickle; payload = pickle.dumps(os_system_object).
Exploitation offensive
Les serveurs d'application d'entreprise (WebLogic, JBoss, WebSphere) ont été massivement touchés par des vulnérabilités de désérialisation Java. Des ransomwares et des APT ont utilisé ces vulnérabilités pour compromettre des serveurs d'application directement accessibles depuis Internet. Les APIs ML qui chargent des modèles via pickle sont une surface d'attaque émergente.
Détection et mitigation
Ne jamais désérialiser des données provenant de sources non fiables. Utiliser des formats de données plus sûrs (JSON, Protobuf) quand possible. En Java, implémenter des filtres de désérialisation (JEP 290, ObjectInputFilter) qui bloquent les classes non autorisées. Mettre à jour les bibliothèques (Commons Collections, Spring, Jackson) qui contenaient des gadget chains. Les WAF avec signatures de désérialisation (pattern 0xaced0005/rO0AB) bloquent les attaques connues.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h