CA5360: Nie należy wywoływać niebezpiecznych metod w deserializacji

Właściwości Wartość
Identyfikator reguły CA5360
Stanowisko Nie wywołuj niebezpiecznych metod w deserializacji
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Wywołanie jednej z następujących niebezpiecznych metod deserializacji:

Wszystkie metody spełniają jedno z następujących wymagań może być wywołaniem zwrotnym deserializacji:

Opis reguły

Niezabezpieczona deserializacji jest luką w zabezpieczeniach, która występuje, gdy niezaufane dane są używane do nadużywania logiki aplikacji, spowodowania ataku typu "odmowa usługi" (DoS), a nawet wykonania dowolnego kodu podczas deserializacji. Złośliwi użytkownicy często mogą nadużywać tych funkcji deserializacji, gdy aplikacja deserializuje niezaufane dane, które są pod ich kontrolą. W szczególności należy wywołać niebezpieczne metody w procesie deserializacji. Pomyślne niezabezpieczone ataki deserializacji mogą umożliwić atakującemu przeprowadzenie ataków, takich jak ataki DoS, obejścia uwierzytelniania i zdalne wykonywanie kodu.

Jak naprawić naruszenia

Usuń te niebezpieczne metody z automatycznego uruchamiania wywołań zwrotnych deserializacji. Wywołaj niebezpieczne metody dopiero po zweryfikowaniu danych wejściowych.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć tę regułę, jeśli:

  • Wiesz, że dane wejściowe są zaufane. Należy wziąć pod uwagę, że granica zaufania aplikacji i przepływy danych mogą ulec zmianie w czasie.
  • Serializowane dane są odporne na naruszenia. Po serializacji kryptograficznie podpisz serializowane dane. Przed deserializacji zweryfikuj podpis kryptograficzny. Ochrona klucza kryptograficznego przed ujawnieniem i projektowaniem rotacji kluczy.
  • Dane są weryfikowane jako bezpieczne dla aplikacji.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA5360
// The code that's violating the rule is on this line.
#pragma warning restore CA5360

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA5360.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

Naruszenie

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        File.Copy(sourceFileName, destFileName);
    }
}

Rozwiązanie

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        // Remove the potential dangerous operation.
        // File.Copy(sourceFileName, destFileName);
    }
}