CA2315: Nie używaj niezabezpieczonego deserializatora ObjectStateFormatter
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2315 |
Tytuł | Nie używaj niezabezpieczonego deserializatora ObjectStateFormatter |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Metoda System.Web.UI.ObjectStateFormatter 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.ObjectStateFormatter wywołania metody deserializacji lub odwołania.
Jak naprawić naruszenia
Jeśli to możliwe, zamiast tego użyj bezpiecznego serializatora i nie zezwalaj osobie atakującej na określenie dowolnego typu deserializacji. Niektóre bezpieczniejsze serializatory obejmują:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer- Nigdy nie używaj .System.Web.Script.Serialization.SimpleTypeResolver Jeśli musisz użyć narzędzia rozpoznawania typów, ogranicz deserializowane typy do oczekiwanej listy.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET — użyj typeNameHandling.None. Jeśli musisz użyć innej wartości dla typeNameHandling, ogranicz deserializowane typy do oczekiwanej listy przy użyciu niestandardowej ISerializationBinder.
- Bufory protokołu
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
Można bezpiecznie pominąć ostrzeżenie z tej reguły, 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.
- Podjęto jeden z środków ostrożności w temacie Jak naprawić naruszenia.
Przykłady przykładów kodu przykładowego
Naruszenie
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
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 ObjectStateFormatter = New ObjectStateFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class