CA2305: Nie używaj niezabezpieczonego deserializatora LosFormatter
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2305 |
Tytuł | Nie używaj niezabezpieczonego deserializatora LosFormatter |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Metoda System.Web.UI.LosFormatter 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.Web.UI.LosFormatter wywołania metody deserializacji lub odwołania.
LosFormatter
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.
Kiedy pomijać ostrzeżenia
LosFormatter
jest niezabezpieczony i nie można go zabezpieczyć.
Przykłady przykładów kodu przykładowego
Naruszenie
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
LosFormatter formatter = new LosFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As LosFormatter = New LosFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class