Maison > développement back-end > C++ > Votre paramètre Json.Net `TypeNameHandling` (Auto) est-il vulnérable aux attaques de données JSON externes ?

Votre paramètre Json.Net `TypeNameHandling` (Auto) est-il vulnérable aux attaques de données JSON externes ?

DDD
Libérer: 2025-01-07 14:39:42
original
964 Les gens l'ont consulté

Is Your Json.Net `TypeNameHandling` Setting (Auto) Vulnerable to External JSON Data Attacks?

Les données JSON externes peuvent-elles constituer une menace avec Json.Net TypeNameHandling défini sur Auto ?

Dans la désérialisation JSON, le paramètre TypeNameHandling de Json. Net joue un rôle crucial dans l’atténuation des menaces potentielles. Cependant, des inquiétudes subsistent concernant la sécurité de l'utilisation de ce paramètre avec les données JSON fournies par l'utilisateur. Examinons le problème et explorons les risques et précautions potentiels.

Les vulnérabilités de TypeNameHandling

Les charges utiles JSON externes peuvent être manipulées pour contenir des propriétés "$type" qui spécifient types pour la désérialisation. Si ces types ne sont pas soigneusement validés, les attaquants peuvent les exploiter pour instancier des objets malveillants appelés « gadgets d'attaque ». Ces gadgets peuvent exécuter des actions malveillantes, telles que l'exécution de code à distance (RCE) ou la manipulation du système de fichiers.

Mesures de protection

Json.Net a mis en place des mesures de protection pour empêcher de telles attaques :

  • Ignorance des propriétés inconnues : Il ignore les propriétés inconnues, rendant les charges utiles JSON avec des propriétés "$type" étrangères inoffensives.
  • Compatibilité de sérialisation : Lors de la désérialisation de valeur polymorphe, il vérifie si le type résolu correspond à celui attendu. Dans le cas contraire, une exception est levée.

Filles potentielles

Malgré ces mesures, il existe certaines situations dans lesquelles un gadget d'attaque peut encore être construit, même dans l'absence de membres évidents non typés :