Udostępnij za pomocą


CA2310: Nie używaj niezabezpieczonego deserializatora NetDataContractSerializer

Właściwości Wartość
Identyfikator reguły CA2310
Tytuł Nie używaj niezabezpieczonego deserializatora NetDataContractSerializer
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 10 Nie.

Przyczyna

Metoda System.Runtime.Serialization.NetDataContractSerializer deserializacji została wywołana lub przywoływała.

Opis reguły

Niezabezpieczone deserializatory są podatne na deserializacji niezaufanych danych. Osoba atakująca może zmodyfikować serializowane dane w celu uwzględnienia nieoczekiwanych typów w celu wstrzyknięcia obiektów ze złośliwymi skutkami ubocznymi. Atak na niezabezpieczonego deserializatora może na przykład wykonywać polecenia w bazowym systemie operacyjnym, komunikować się za pośrednictwem sieci lub usuwać pliki.

Ta reguła znajduje System.Runtime.Serialization.NetDataContractSerializer wywołania metody deserializacji lub odwołania. Jeśli chcesz deserializować tylko wtedy, gdy Binder właściwość jest ustawiona na ograniczanie typów, wyłącz tę regułę i włącz reguły CA2311 i CA2312 . Ograniczenie, które typy mogą być deserializowane, może pomóc wyeliminować znane ataki zdalnego wykonywania kodu, ale deserializacja nadal będzie podatna na ataki typu "odmowa usługi".

NetDataContractSerializer jest niezabezpieczony i nie można go zabezpieczyć. Aby uzyskać więcej informacji, zobacz Przewodnik po zabezpieczeniach BinaryFormatter.

Jak naprawić naruszenia

  • Zamiast tego użyj bezpiecznego serializatora i nie zezwalaj osobie atakującej na określenie dowolnego typu do deserializacji. Aby uzyskać więcej informacji, zobacz Preferowane alternatywy.
  • Ustaw serializacji danych na dowód manipulacji. Po serializacji kryptograficznie podpisz serializowane dane. Przed deserializacji zweryfikuj podpis kryptograficzny. Ochrona klucza kryptograficznego przed ujawnieniem i projektowaniem rotacji kluczy.
  • Ta opcja sprawia, że kod jest podatny na ataki typu "odmowa usługi" i możliwe ataki zdalnego wykonywania kodu w przyszłości. Aby uzyskać więcej informacji, zobacz Przewodnik po zabezpieczeniach BinaryFormatter. Ogranicz deserializowane typy. Zaimplementuj niestandardowy System.Runtime.Serialization.SerializationBinderelement . Przed deserializacji ustaw Binder właściwość na wystąpienie niestandardowe SerializationBinder we wszystkich ścieżkach kodu. W metodzie przesłoniętej BindToType , jeśli typ jest nieoczekiwany, należy zgłosić wyjątek, aby zatrzymać deserializacji.

Kiedy pomijać ostrzeżenia

NetDataContractSerializer jest niezabezpieczony i nie można go zabezpieczyć.

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

Naruszenie

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

public class ExampleClass
{
    public object MyDeserialize(byte[] bytes)
    {
        NetDataContractSerializer serializer = new NetDataContractSerializer();
        return serializer.Deserialize(new MemoryStream(bytes));
    }
}
Imports System.IO
Imports System.Runtime.Serialization

Public Class ExampleClass
    Public Function MyDeserialize(bytes As Byte()) As Object
        Dim serializer As NetDataContractSerializer = New NetDataContractSerializer()
        Return serializer.Deserialize(New MemoryStream(bytes))
    End Function
End Class

CA2311: Nie deserializuj bez pierwszego ustawienia NetDataContractSerializer.Binder

CA2312: Przed deserializacji upewnij się, że parametr NetDataContractSerializer.Binder został ustawiony