Share via


CA2153: voorkomen dat beschadigde status-uitzonderingen worden verwerkt

Eigenschappen Weergegeven als
Regel-id CA2153
Titel Voorkomen dat beschadigde status-uitzonderingen worden verwerkt
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Nee

Oorzaak

Beschadigde status-uitzonderingen (CSP's) geven aan dat er geheugenbeschadiging bestaat in uw proces. Als een aanvaller een aanval kan uitvoeren in de beschadigde geheugenregio, kan het niet mogelijk zijn om dit te ondervangen in plaats van het proces vast te laten lopen.

Beschrijving van regel

CSE geeft aan dat de status van een proces is beschadigd en niet door het systeem is gevangen. In het scenario met beschadigde status wordt de uitzondering alleen door een algemene handler onderschept als u uw methode markeert met het System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute kenmerk. De Common Language Runtime (CLR) roept standaard geen catch-handlers aan voor CSP'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 bij het vangen van CSP's met een algemene handler die alle uitzonderingen onderschept, bijvoorbeeld catch (System.Exception e) of catch zonder uitzonderingsparameter.

Schendingen oplossen

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

  • Verwijder het HandleProcessCorruptedStateExceptionsAttribute kenmerk. Dit keert terug naar het standaardgedrag van runtime waarbij CSP's niet worden doorgegeven aan catch handlers.

  • Verwijder de algemene catch-handler in de voorkeur 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 moet resulteren in het beĆ«indigen 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

Als u het HandleProcessCorruptedStateExceptionsAttribute kenmerk verwijdert, zorgt u ervoor dat beschadigde statusuitzonderingen niet worden verwerkt door uw methode.

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

Oplossing 2: specifieke uitzonderingen vangen

Verwijder de algemene catch-handler en catch alleen specifieke uitzonderingstypen.

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;
    }
}