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