CA5360 : Ne pas appeler de méthodes dangereuses dans la désérialisation

Propriété Value
Identificateur de la règle CA5360
Titre Ne pas appeler de méthodes dangereuses dans la désérialisation
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Appel de l’une des méthodes dangereuses suivantes dans la désérialisation :

Toutes les méthodes répondent à l’une des exigences suivantes, il peut s’agir du rappel de désérialisation :

Description de la règle

La désérialisation non sécurisée est une vulnérabilité qui se produit lorsque des données non approuvées sont utilisées pour abuser de la logique d’une application, infliger une attaque par déni de service (DoS) ou même exécuter du code arbitraire lors de leur désérialisation. Il est souvent possible pour les utilisateurs malveillants d’abuser de ces fonctionnalités de désérialisation lorsque l’application désérialise des données non approuvées qui sont sous leur contrôle. Plus précisément, appelez des méthodes dangereuses dans le processus de désérialisation. Les attaques de désérialisation non sécurisée réussies pourraient permettre à un attaquant d’effectuer des attaques telles que les attaques par déni de service, les contournements d’authentification et l’exécution de code à distance.

Comment corriger les violations

Supprimez ces méthodes dangereuses de l’exécution automatique dans les rappels de désérialisation. Appelez des méthodes dangereuses uniquement après avoir validé l’entrée.

Quand supprimer les avertissements

Vous pouvez supprimer cette règle en toute sécurité si :

  • Vous savez que l’entrée est approuvée. Tenez compte du fait que la limite de confiance et les flux de données de votre application peuvent changer au fil du temps.
  • Les données sérialisées sont 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 rotations des clés.
  • Les données sont validées comme étant sécurisées pour l’application.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA5360
// The code that's violating the rule is on this line.
#pragma warning restore CA5360

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA5360.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemples de pseudo-code

Violation

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        File.Copy(sourceFileName, destFileName);
    }
}

Solution

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        // Remove the potential dangerous operation.
        // File.Copy(sourceFileName, destFileName);
    }
}