Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA2300 |
| Tytuł | Nie używaj niezabezpieczonego deserializatora BinaryFormatter |
| Kategoria | Bezpieczeństwo |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Metoda System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializacji została wywołana lub odwołana.
Opis reguły
Niezabezpieczone deserializatory są podatne podczas 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.Formatters.Binary.BinaryFormatter wywołania metody deserializacji lub referencje. Jeśli chcesz dokonać deserializacji tylko wtedy, gdy właściwość Binder jest ustawiona, aby ograniczać typy, wyłącz tę regułę i włącz reguły CA2301 i CA2302. 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".
BinaryFormatter 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.
- Spraw, aby zserializowane dane były odporne na manipulacje. Po serializacji kryptograficznie podpisz serializowane dane. Przed deserializacji zweryfikuj podpis kryptograficzny. Chroń klucz kryptograficzny przed ujawnieniem i zaprojektuj rotacje 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 element System.Runtime.Serialization.SerializationBinder. Przed deserializacją ustaw
Binderwłaściwość na niestandardowe wystąpienie SerializationBinder we wszystkich ścieżkach kodu. W metodzie przesłoniętej BindToType, jeśli typ jest nieoczekiwany, należy rzucić wyjątek, aby zatrzymać deserializację.
Kiedy pomijać ostrzeżenia
BinaryFormatter jest niezabezpieczony i nie można go zabezpieczyć.
Przykłady pseudokodu
Naruszenie
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
BinaryFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As BinaryFormatter = New BinaryFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class