CA2315 : N’utilisez pas le désérialiseur non sécurisé ObjectStateFormatter
Propriété | Value |
---|---|
Identificateur de la règle | CA2315 |
Titre | N’utilisez pas le désérialiseur non sécurisé ObjectStateFormatter |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Une méthode de désérialisation System.Web.UI.ObjectStateFormatter a été appelée ou référencée.
Description de la règle
Les désérialiseurs non sécurisés sont vulnérables lors de la désérialisation de données non approuvées. Un attaquant peut modifier les données sérialisées pour y inclure des types inattendus afin d’injecter des objets avec des effets secondaires malveillants. Une attaque contre un désérialiseur non sécurisé peut, par exemple, exécuter des commandes sur le système d’exploitation sous-jacent, communiquer sur le réseau ou supprimer des fichiers.
Cette règle recherche les appels ou références de méthode de désérialisation System.Web.UI.ObjectStateFormatter.
Comment corriger les violations
Si possible, utilisez plutôt un sérialiseur sécurisé et ne permettez pas à un attaquant de spécifier un type arbitraire à désérialiser. Voici quelques sérialiseurs plus sûrs :
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer - N’utilisez jamais System.Web.Script.Serialization.SimpleTypeResolver. Si vous devez utiliser un programme de résolution de type, limitez les types désérialisés à une liste attendue.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET - Utilisez TypeNameHandling.None. Si vous devez utiliser une autre valeur pour TypeNameHandling, limitez les types désérialisés à une liste attendue avec un ISerializationBinder personnalisé.
- Mémoires tampon de protocole
Rendez les données sérialisées inviolables. Après la sérialisation, signez par chiffrement les données sérialisées. Avant la désérialisation, validez la signature de chiffrement. Protégez la clé de chiffrement contre la divulgation, et concevez un mécanisme de permutation des clés.
Quand supprimer les avertissements
Vous pouvez supprimer sans risque un avertissement de cette règle si :
- Vous savez que l’entrée est approuvée. Considérez que la limite d’approbation et les flux de données de votre application peuvent changer au fil du temps.
- Vous avez pris l’une des précautions indiquées dans Comment corriger les violations.
Exemples de pseudo-code
Violation
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As ObjectStateFormatter = New ObjectStateFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class