Applications, sites et API

Particuliers et entreprises

Exploitation d’une désérialisation non sûre

Insecure deserialization exploitation

La reconstruction d’un objet à partir de données déclenche un comportement dangereux.

Révision éditoriale : Comprendre : 2 min · Cas technique et détails : 5 min
Je pense être concerné : que faire ?
Illustration pédagogique : exploitation d’une désérialisation non sûre.

Comprendre et agir

À la fin de cette lecture, vous pourrez expliquer le piège et choisir une première réaction adaptée à votre rôle. Aucun prérequis informatique n’est nécessaire.

Une situation concrète

Une application reçoit un paquet décrivant des données à reconstruire. Si elle accepte aussi les indications qui choisissent des objets et leurs comportements, ce paquet peut déclencher des actions pendant sa lecture.

Comment cela fonctionne

La sérialisation transforme des données en un format transportable ; la désérialisation fait l’inverse. Le danger apparaît quand un programme reconstruit sans précaution des objets complexes à partir d’un contenu non fiable. Selon le format et les bibliothèques, la lecture peut déclencher du code ou consommer trop de ressources. Tous les fichiers JSON ne présentent pas ce risque : la manière de les traiter est déterminante.

Comment le piège fonctionne
  1. Un paquet doit devenir des objets

    Import, message ou état sauvegardé.

  2. La reconstruction est trop permissive

    Le contenu choisit des comportements.

  3. Le service agit pendant la lecture

    Code ou ressources détournés.

Ce que vous pouvez faire

Vos premiers réflexes

Utilisez les versions maintenues de vos applications et signalez les imports anormaux. Vous n’avez pas à inspecter les objets internes ni à corriger le format du service.

Si vous êtes responsable du service ou de l’organisation

Développeurs : acceptez des structures de données définies et limitez taille et profondeur. Vérifiez aussi les traitements différés qui reconstruisent les objets après l’import.

Le détail qui change toutUne idée reçue à corriger

Un message correctement encodé ou compressé n’est pas pour autant digne de confiance.

À vous de décider

Un fichier est présenté comme de simples données. Cela garantit-il que son import ne peut rien déclencher ?

Choisissez votre réponse et expliquez pourquoi avant de lire la correction.

Voir la réponse expliquée

Non. Tout dépend de la manière dont l’application le lit : certains traitements peuvent reconstruire des objets actifs ou consommer trop de ressources. Utilisez une application maintenue et signalez un import anormal ; la validation du format relève de son développeur.

Analyser un cas technique

Pour les personnes qui développent, administrent ou analysent les systèmes concernés. Commencez par « Comprendre et agir » si ces notions sont nouvelles pour vous.

Étude de cas fictive

Un message de données déclenche un comportement dans le serveur

La désérialisation reconstitue des données à partir d’un message ou d’un fichier. Certains formats permettent aussi de recréer des objets et d’appeler du code associé à leurs classes. Accepter ces formats depuis une source non fiable peut donc provoquer bien plus qu’une simple lecture de données.

Le danger peut se trouver loin de la requête initiale. Une API enregistre un message dans une file, puis un worker le désérialise avec davantage de droits. Contrôler uniquement l’entrée HTTP laisse ce second traitement exposé. Il faut suivre le message jusqu’au composant qui l’interprète et identifier sa bibliothèque, sa version et ses options.

Un format de données simple réduit la surface d’attaque, mais nécessite encore une validation : champs autorisés, types, tailles et valeurs. Des limites de profondeur et de volume évitent qu’un message provoque une consommation excessive de mémoire ou de calcul. Une signature de message n’est utile que si la clé et l’émetteur sont fiables ; elle ne rend pas sûr un contenu signé par une source compromise.

L’enquête doit relier le message, le worker et les effets observés : processus enfant, fichier créé ou connexion sortante. Une erreur de décodage isolée est moins probante qu’une action inattendue déclenchée au même instant par ce worker.

Le déroulement en schéma

Qui échange avec quiLisez les échanges de haut en bas. Le point marque le départ et la flèche l’arrivée. Les vérifications après correction ne sont pas la suite de l’attaque.

Faites défiler le diagramme pour suivre les échanges ; les noms des acteurs restent en haut. Sur petit écran, faites aussi défiler de gauche à droite.

Étape
ProducteurConfiance externe
File de jobsMessages persistants
DésérialiseurTypes et callbacks
WorkerCapacités système
  1. Action

    Objet sérialisé

    Producteur vers File de jobs

    Trace j55

  2. Action

    Livraison ou rejeu

    File de jobs vers Désérialiseur

  3. Action sur place

    Résolution dynamique de classes

    Désérialiseur

    Trace class_policy

  4. Action

    Callback de restauration

    Désérialiseur vers Worker

    Trace restore_state

  5. Action sur place

    Processus enfant inattendu

    Worker

    Trace p91

  6. Action

    Après correction : données JSON

    File de jobs vers Désérialiseur

  7. Action

    Objet construit explicitement après schéma

    Désérialiseur vers Worker

    Trace report-v2

Comment repérer cette attaque

Indices à rechercher

  • Des objets ou types inattendus sont reçus par une interface.
  • Le traitement d’un message lance des actions sans rapport avec ses données.
  • Des erreurs de reconstruction ou consommations mémoire se répètent.

Repérer les messages rejetés, les types de données inattendus et les comportements inhabituels des workers pendant le traitement d’un message.

Éléments à croiser

Relier le message consommé à l’instance du worker et à ses processus enfants. Comparer un message rejeté avant désérialisation avec le message suspect réellement traité.

Limites de l’interprétation

Une file interne n’est pas une preuve de confiance dans son contenu. Le journal système ne révèle pas à lui seul la classe désérialisée : cette information vient de l’instrumentation du consommateur.

Comment réagir

Mettre en quarantaine les messages concernés sans les ouvrir avec le mécanisme vulnérable. Corriger le format et les options, traiter les messages déjà en file et examiner les secrets du worker. Reconstruire les environnements dont l’intégrité est incertaine.

Vérifier la correction

Ces contrôles s’adressent à l’équipe responsable du système. Les simulations se préparent dans un environnement de test autorisé ; la lecture du cas ne nécessite aucune manipulation.

  1. Le service doit refuser les types d’objets et champs non prévus.
  2. Les messages trop volumineux ou trop profonds doivent être rejetés avant d’épuiser les ressources.
  3. Le même contrôle doit s’appliquer aux imports, files et reprises de traitements.

À vous de raisonner

L’API valide la requête, puis un worker privilégié relit le message avec un autre décodeur. Quel périmètre la revue doit-elle couvrir ?

Formulez votre décision et l’élément qui la justifie avant d’ouvrir la correction.

Comparer avec le raisonnement expliqué

Suivez le message jusqu’au worker, sa bibliothèque et ses options de décodage. Les types, champs et limites de taille doivent être contrôlés aux traitements concernés. La validation HTTP ne suffit pas si le consommateur interprète autrement le contenu ou recrée des objets actifs.

Consulter les détails techniques

Pour aller plus loin après l’étude du cas : les extraits servent à s’exercer à la lecture des traces ; le guide de collecte aide les personnes qui disposent des outils et des accès nécessaires.

Lire les extraits commentés — reconstitution fictive

Ces extraits utilisent des valeurs fictives. Certains reprennent des champs documentés ; d’autres regroupent plusieurs sources dans un format pédagogique. Ce ne sont pas des exports bruts à retrouver tels quels dans vos outils. Commencez par les champs expliqués, puis retrouvez-les dans les extraits.

type_resolution
Information pédagogique sur le choix des types par le consommateur ; à collecter dans cette application, pas dans le journal du broker seul.
callback
Fonction de restauration appelée dans le scénario ; son nom n’est pas un indicateur universel de compromission.

Séquence suspecte dans un worker

Journal

Logs synthétiques ; un type demandé et un processus enfant ne sont pas des champs universels de tous les désérialiseurs.

job=j55 producer=partner-7 format=native-object payload_size=824
job=j55 type_resolution=dynamic class_policy=unrestricted
job=j55 worker=w3 callback=restore_state
host=w3 process=p91 parent=worker image=/bin/sh
job=j56 producer=partner-7 format=json schema=report-v2 result=rejected
Préparer une collecte dans votre environnement

Choisissez les sources qui correspondent à vos outils et à votre périmètre d’intervention. Cette liste n’est pas un équipement requis pour comprendre la fiche. Vérifiez que les journaux nécessaires étaient activés pendant la période étudiée. Conservez l’export original, son fuseau horaire et sa provenance dans un espace à accès restreint ; travaillez sur une copie expurgée des secrets.

  1. Service concerné — audit et historique à vérifier

    Où les trouver
    Dans l’outil d’administration ou les journaux du service concerné. Demander à son mainteneur où sont enregistrées les décisions d’autorisation et les opérations métier.
    Quoi relever
    Dans le consommateur de messages, rechercher job, producteur authentifié, format, version de schéma, classes autorisées et résultat de validation. Une erreur de parsing seule n’indique pas si un objet dangereux a été instancié.
    Accès et prérequis
    Il n’existe ni fichier ni vocabulaire universels. Les champs proposés ici doivent être instrumentés s’ils manquent ; ne pas enregistrer mots de passe, jetons ou contenu privé intégral.
    Documentation : Service concerné — audit et historique à vérifier
  2. Linux — auditd

    Où les trouver
    Sur le serveur concerné, dans le fichier log_file d’auditd, généralement /var/log/audit/audit.log. Les enregistrements SYSCALL, EXECVE et PATH d’un même événement partagent le numéro dans msg=audit(...).
    Quoi relever
    Sur le worker Linux, rechercher les exécutions anormales après traitement du message : exécutable, parent, identité système et heure. Vérifier que les règles d’audit couvraient les exécutions.
    Accès et prérequis
    Service actif et règles d’audit adaptées avant les faits. Linux n’enregistre pas automatiquement toutes les exécutions et lectures ; les arguments et chemins collectés peuvent être sensibles.
    Documentation : Linux — auditd

Dans l’histoire des cyberattaques

Groupes et campagnes documentés

1 repère

Des faits réels pour situer ce mécanisme. Les années sont celles des faits ; chaque notice précise qui établit le lien avec le groupe ou la campagne.

  1. GroupeHAFNIUM

    Exchange : enchaîner plusieurs failles pour entrer

    Microsoft décrit des intrusions dans des serveurs Exchange installés chez les organisations. Une SSRF permet de contourner une étape d’authentification ; une désérialisation non sûre peut ensuite permettre l’exécution de code avec des droits élevés. Des courriels deviennent accessibles aux attaquants.

    Ce qu’établit la source. Microsoft attribue avec une confiance élevée les premières attaques ciblées à HAFNIUM. L’éditeur signale ensuite l’exploitation de ces mêmes failles par d’autres acteurs.

    Consulter le rapport HAFNIUM targeting Exchange Servers with 0-day exploits

    Microsoft · Publié le

Sélection de cas documentés, non exhaustive. Une technique peut être utilisée par de nombreux acteurs. Les cas fictifs de la fiche ne sont attribués à aucun de ces groupes.

Si vous pensez être concerné

Si vous utilisez le service

Utilisez les versions maintenues de vos applications et signalez les imports anormaux. Vous n’avez pas à inspecter les objets internes ni à corriger le format du service.

Pour l’équipe qui exploite le service

  1. Suspendez le traitement dangereux et préservez les messages utiles.
  2. Vérifiez les effets produits avec les droits du service.
  3. Corrigez le modèle de données et recherchez les autres interfaces utilisant le même mécanisme.

Pour qualifier votre situation et être orienté : obtenir une assistance sur 17Cyber. Dans une organisation, prévenez aussi le responsable ou prestataire chargé de la sécurité.

Sources et repères pour approfondir