Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Deserialization Attack

hacking

Dé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

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis