CA2153: Unikaj obsługi wyjątków stanu uszkodzonego
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2153 |
Tytuł | Unikaj obsługiwania wyjątków stanu uszkodzenia |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Uszkodzone wyjątki stanu (CSE) wskazują, że uszkodzenie pamięci istnieje w procesie. Przechwycenie tych elementów zamiast zezwalania na awarię procesu może prowadzić do luk w zabezpieczeniach, jeśli osoba atakująca może umieścić luki w zabezpieczeniach w uszkodzonym regionie pamięci.
Opis reguły
CSE wskazuje, że stan procesu został uszkodzony i nie został przechwycony przez system. W scenariuszu uszkodzonego stanu program obsługi ogólnej przechwytuje wyjątek tylko wtedy, gdy oznaczysz metodę za pomocą atrybutu System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute . Domyślnie środowisko uruchomieniowe języka wspólnego (CLR) nie wywołuje programów obsługi catch dla csEs.
Najbezpieczniejszą opcją jest umożliwienie awarii procesu bez przechwytywania tego rodzaju wyjątków. Nawet kod rejestrowania może umożliwić osobom atakującym wykorzystanie usterek uszkodzenia pamięci.
To ostrzeżenie jest wyzwalane podczas przechwytywania cses z ogólną procedurą obsługi, która przechwytuje wszystkie wyjątki, na przykład catch (System.Exception e)
lub catch
bez parametru wyjątku.
Jak naprawić naruszenia
Aby rozwiązać to ostrzeżenie, wykonaj jedną z następujących czynności:
HandleProcessCorruptedStateExceptionsAttribute Usuń atrybut. Spowoduje to przywrócenie domyślnego zachowania czasu wykonywania, w którym csEs nie są przekazywane do programów obsługi przechwytywania.
Usuń ogólną procedurę obsługi catch w preferencjach procedur obsługi, które przechwytują określone typy wyjątków. Może to obejmować CSE, przy założeniu, że kod obsługi może bezpiecznie je obsłużyć (rzadko).
Ponownie przeróć csE w procedurze obsługi catch, która przekazuje wyjątek do elementu wywołującego i powinna spowodować zakończenie uruchomionego procesu.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń dla tej reguły.
Przykład przykładowy kod przykładowy
Naruszenie
Poniższy pseudo-kod ilustruje wzorzec wykryty przez tę regułę.
[HandleProcessCorruptedStateExceptions]
// Method that handles CSE exceptions.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Rozwiązanie 1 — usuwanie atrybutu
Usunięcie atrybutu HandleProcessCorruptedStateExceptionsAttribute gwarantuje, że wyjątki stanu uszkodzonego nie są obsługiwane przez metodę .
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Handle exception.
}
}
Rozwiązanie 2 — przechwytywanie określonych wyjątków
Usuń ogólną procedurę obsługi catch i przechwyć tylko określone typy wyjątków.
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (IOException e)
{
// Handle IOException.
}
catch (UnauthorizedAccessException e)
{
// Handle UnauthorizedAccessException.
}
}
Rozwiązanie 3 — ponowne wróć
Ponownie wywróć wyjątek.
[HandleProcessCorruptedStateExceptions]
void TestMethod1()
{
try
{
FileStream fileStream = new FileStream("name", FileMode.Create);
}
catch (Exception e)
{
// Rethrow the exception.
throw;
}
}