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 9 | 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
Powiązane reguły
CA2311: Nie deserializuj bez pierwszego ustawienia NetDataContractSerializer.Binder