Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | CA2315 |
| Titre | N’utilisez pas le désérialiseur non sécurisé ObjectStateFormatter |
| Catégorie | Sécurité |
| Le correctif a un effet disruptif ou non disruptif | Sans rupture |
| Activé par défaut dans .NET 10 | Non |
| Langues applicables | C# et Visual Basic |
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 de méthode System.Web.UI.ObjectStateFormatter ou les références de désérialisation.
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 fiable. 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
Infraction
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