Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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;
}
}