CA2305 : N’utilisez pas le désérialiseur non sécurisé LosFormatter
Propriété | Value |
---|---|
Identificateur de la règle | CA2305 |
Titre | N’utilisez pas le désérialiseur non sécurisé LosFormatter |
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.LosFormatter 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.LosFormatter.
LosFormatter
n’est pas sécurisé et ne peut pas être sécurisé. Pour plus d’informations, consultez le Guide de sécurité de BinaryFormatter.
Comment corriger les violations
- Utilisez plutôt un sérialiseur sécurisé, et n’autorisez pas un attaquant à spécifier un type arbitraire à désérialiser. Pour plus d’informations, consultez les Alternatives préférées.
- 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
LosFormatter
n’est pas sécurisé et ne peut pas être sécurisé.
Exemples de pseudo-code
Violation
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
LosFormatter formatter = new LosFormatter();
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 LosFormatter = New LosFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class