CA2153: Vermijd de verwerking van corruptie-status uitzonderingen

Eigenschap Waarde
Regel-id CA2153
Titel Vermijd het verwerken van uitzonderingen met een beschadigde status
Categorie Beveiliging
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Nee
Toepasselijke talen C# en Visual Basic

Oorzaak

Corrupted State Exceptions (CSE's) geven aan dat er sprake is van geheugenbeschadiging in uw proces. Als een aanvaller een exploit kan plaatsen in de beschadigde geheugenregio, kan het opvangen van deze problemen in plaats van het proces te laten crashen, leiden tot veiligheidsproblemen.

Beschrijving van regel

CSE geeft aan dat de toestand van een proces is beschadigd en niet door het systeem is opgemerkt. In het scenario met een corrupte status wordt de uitzondering alleen onderschept door een algemene handler als u uw methode markeert met het System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute kenmerk. Standaard roept de Common Language Runtime (CLR) geen catch-handlers aan voor CSE's.

De veiligste optie is om het proces te laten crashen zonder dit soort uitzonderingen te ondervangen. Zelfs met logboekregistratiecode kunnen aanvallers misbruik maken van beschadigingsfouten in het geheugen.

Deze waarschuwing wordt geactiveerd wanneer CSE's worden gevangen met een algemene handler die alle uitzonderingen onderschept, bijvoorbeeld catch (System.Exception e) of catch zonder uitzonderingsparameter.

Hoe schendingen op te lossen

Ga op een van de volgende manieren te werk om deze waarschuwing op te lossen:

  • Verwijder het HandleProcessCorruptedStateExceptionsAttribute kenmerk. Dit wordt teruggezet naar het standaardruntimegedrag waarbij CSP's niet worden doorgegeven aan catch handlers.

  • Verwijder de algemene catch-handler ten gunste van handlers die specifieke uitzonderingstypen vangen. Dit kunnen CSP's zijn, ervan uitgaande dat de handlercode deze veilig kan verwerken (zeldzaam).

  • Gooi de CSE opnieuw in de catch-handler, die de uitzondering doorgeeft aan de aanroeper en zou moeten resulteren in het stopzetten van het actieve proces.

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.

Voorbeeld van pseudocode

Schending

De volgende pseudocode illustreert het patroon dat door deze regel is gedetecteerd.

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

Oplossing 1: het kenmerk verwijderen

Door het HandleProcessCorruptedStateExceptionsAttribute kenmerk te verwijderen, zorgt u ervoor dat uitzonderingen voor corrupte staten niet door uw methode worden afgehandeld.

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

Oplossing 2: specifieke uitzonderingen vangen

Verwijder de algemene foutafhandelaar en vang alleen specifieke exceptietypen op.

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

Oplossing 3 : opnieuw werpen

De uitzondering opnieuw afwerpen.

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