CA2315: Unsicheren Deserialisierer nicht verwenden: ObjectStateFormatter
Eigenschaft | Wert |
---|---|
Regel-ID | CA2315 |
Titel | Unsicheren Deserialisierer nicht verwenden: ObjectStateFormatter |
Kategorie | Security |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Die Deserialisierungsmethode System.Web.UI.ObjectStateFormatter wurde aufgerufen, oder es wurde auf sie verwiesen.
Regelbeschreibung
Unsichere Deserialisierer sind beim Deserialisieren nicht vertrauenswürdiger Daten anfällig. Ein Angreifer könnte den serialisierten Daten unerwartete Datentypen hinzufügen, um Objekte mit schädlichen Auswirkungen einschleusen. Ein Angriff auf einen unsicheren Deserialisierer könnte z. B. Befehle auf dem dahinterliegenden Betriebssystem ausführen, über das Netzwerk kommunizieren oder Dateien löschen.
Diese Regel ermittelt Aufrufe der Deserialisierungsmethode System.Web.UI.ObjectStateFormatter oder Verweise auf diese.
Behandeln von Verstößen
Wenn möglich, verwenden Sie stattdessen ein sicheres Serialisierungsmodul und lassen Sie nicht zu, dass ein Angreifer einen beliebigen Typ zur Deserialisierung angibt. Zu den sichereren Serialisierungsmodulen zählen:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer – Verwenden Sie niemals System.Web.Script.Serialization.SimpleTypeResolver. Wenn Sie einen Typresolver verwenden müssen, beschränken Sie die deserialisierten Typen auf eine Liste erwarteter Typen.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET – Verwenden Sie TypeNameHandling.None. Wenn Sie einen anderen Wert für TypeNameHandling verwenden müssen, beschränken Sie die deserialisierten Typen auf eine Liste erwarteter Typen mit einem benutzerdefinierten ISerializationBinder.
- Protokollpuffer
Stellen Sie sicher, dass die serialisierten Daten nicht manipuliert werden können. Signieren Sie die serialisierten Daten nach der Serialisierung kryptografisch. Überprüfen Sie vor der Deserialisierung die kryptografische Signatur. Schützen Sie den Kryptografieschlüssel vor der Offenlegung und richten Sie Schlüsselrotationen ein.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung aus dieser Regel kann sicher unterdrückt werden, wenn Folgendes gilt:
- Sie wissen, dass die Eingabe vertrauenswürdig ist. Berücksichtigen Sie, dass sich die Vertrauensstellungsgrenze und Datenflüsse Ihrer Anwendung im Laufe der Zeit ändern können.
- Sie haben eine der Sicherheitsmaßnahmen unter Behandeln von Verstößen ergriffen.
Pseudocodebeispiele
Verletzung
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