Maison > développement back-end > C++ > La désérialisation JSON automatique avec « TypeNameHandling.Auto » de Json.Net est-elle sécurisée, même en limitant la désérialisation à un type spécifique ?

La désérialisation JSON automatique avec « TypeNameHandling.Auto » de Json.Net est-elle sécurisée, même en limitant la désérialisation à un type spécifique ?

Mary-Kate Olsen
Libérer: 2025-01-07 14:16:41
original
874 Les gens l'ont consulté

Is Automatic JSON Deserialization with Json.Net's `TypeNameHandling.Auto` Secure, Even When Limiting Deserialization to a Specific Type?

Le JSON externe peut-il être vulnérable en raison de la gestion automatique du nom de type Json.Net ?

Problème :

Dans les applications de sites Web où les utilisateurs téléchargent des objets JSON personnalisés, il est impératif d'être conscient des menaces potentielles découlant du type JSON automatisé. désérialisation. La question est de savoir si la désérialisation automatique de type est sensible aux vulnérabilités si le seul type désérialisé est un type spécifique (par exemple, MyObject) et qu'aucun des membres de MyObject n'a le type System.Object ou dynamique.

Réponse :

Bien que le respect de ces conditions réduit considérablement le risque, il ne garantit pas une protection complète. Le paramètre TypeNameHandling de Json.Net, lorsqu'il est défini sur Auto, peut potentiellement créer des objets basés sur les informations « $type » même lorsqu'aucun champ correspondant n'existe dans MyObject.

Explication détaillée :

Les attaques ciblant Json.Net exploitent le paramètre TypeNameHandling pour construire des « gadgets d'attaque » – des objets conçus pour compromettre le système récepteur. Les mécanismes de protection de Json.Net incluent l'ignorance des propriétés inconnues et la vérification de la compatibilité des types. Cependant, il existe des scénarios dans lesquels un gadget d'attaque peut être construit même sans aucun membre non typé évident :