CA2153 : Éviter la gestion des exceptions d’état altéré

Propriété Value
Identificateur de la règle CA2153
Titre Éviter la gestion des exceptions d’état altéré
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Les exceptions état altéré indiquent une altération de la mémoire dans votre processus. Le fait d’intercepter ces exceptions au lieu d’autoriser le processus à se bloquer peut engendrer des failles de sécurité si une personne malveillante réussit à placer une attaque dans la région de la mémoire endommagée.

Description de la règle

Les CSE indiquent que l’état d’un processus a été endommagé et qu’il n’a pas été intercepté par le système. Dans un scénario d’état altéré, un gestionnaire général intercepte uniquement l’exception si vous marquez votre méthode au moyen de l’attribut System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute. Par défaut, le Common Language Runtime (CLR) n’appelle pas les gestionnaires catch pour les exceptions état altéré.

L’option la plus sûre consiste à autoriser le processus à se planter sans intercepter ces types d’exceptions. Même le code de journalisation peut permettre aux attaquants d’exploiter les bogues d’altération de la mémoire.

Cet avertissement se déclenche lors de l’interception d’exceptions état altéré avec un gestionnaire général qui intercepte toutes les exceptions, par exemple catch (System.Exception e) ou catch sans paramètre d’exception.

Comment corriger les violations

Pour résoudre cet avertissement, effectuez l'une des opérations suivantes :

  • Supprimez l'attribut HandleProcessCorruptedStateExceptionsAttribute. Cela a pour effet de rétablir le comportement du runtime par défaut selon lequel les exceptions état altéré ne sont pas passées aux gestionnaires catch.

  • Supprimer le gestionnaire catch général et privilégier les gestionnaires qui interceptent des types d’exceptions spécifiques. Cela peut inclure des exceptions état altéré si le code du gestionnaire est capable de les gérer de manière sécurisée (ce qui est rare).

  • Levez à nouveau l’exception état altéré dans le gestionnaire catch, ce qui passe l’exception à l’appelant et doit avoir pour conséquence l’arrêt du processus en cours d’exécution.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple de pseudo-code

Violation

Le pseudo-code suivant illustre le modèle détecté par cette règle.

[HandleProcessCorruptedStateExceptions]
// Method that handles CSE exceptions.
void TestMethod1()
{
    try
    {
        FileStream fileStream = new FileStream("name", FileMode.Create);
    }
    catch (Exception e)
    {
        // Handle exception.
    }
}

Solution 1 : Supprimer l’attribut

La suppression de l’attribut HandleProcessCorruptedStateExceptionsAttribute garantit que les exceptions état altéré ne sont pas gérées par votre méthode.

void TestMethod1()
{
    try
    {
        FileStream fileStream = new FileStream("name", FileMode.Create);
    }
    catch (Exception e)
    {
        // Handle exception.
    }
}

Solution 2 : Intercepter des exceptions spécifiques

Supprimez le gestionnaire catch général et interceptez uniquement des types d’exceptions spécifiques.

void TestMethod1()
{
    try
    {
        FileStream fileStream = new FileStream("name", FileMode.Create);
    }
    catch (IOException e)
    {
        // Handle IOException.
    }
    catch (UnauthorizedAccessException e)
    {
        // Handle UnauthorizedAccessException.
    }
}

Solution 3 : Lever à nouveau

Levez à nouveau l’exception.

[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
    try
    {
        FileStream fileStream = new FileStream("name", FileMode.Create);
    }
    catch (Exception e)
    {
        // Rethrow the exception.
        throw;
    }
}