CA2310: Unsicheren Deserialisierer nicht verwenden: NetDataContractSerializer
Eigenschaft | Wert |
---|---|
Regel-ID | CA2310 |
Titel | Unsicheren Deserialisierer nicht verwenden: NetDataContractSerializer |
Kategorie | Security |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | No |
Ursache
Die Deserialisierungsmethode System.Runtime.Serialization.NetDataContractSerializer 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.Runtime.Serialization.NetDataContractSerializer oder Verweise auf diese. Wenn eine Deserialisierung nur durchgeführt werden soll, wenn die Eigenschaft Binder auf eingeschränkte Typen festgelegt ist, deaktivieren Sie diese Regel, und aktivieren Sie stattdessen die Regeln CA2311 und CA2312. Die Einschränkung der deserialisierbaren Typen kann dabei helfen, gegen bekannte Angriffe mit Remotecodeausführung vorzugehen. Die Deserialisierung ist jedoch weiterhin für Denial-of-Service-Angriffe anfällig.
NetDataContractSerializer
ist unsicher und kann nicht sicher gemacht werden. Weitere Informationen finden Sie im Sicherheitsleitfaden für BinaryFormatter.
Behandeln von Verstößen
- Verwenden Sie stattdessen ein sicheres Serialisierungsmodul, und lassen Sie nicht zu, dass ein Angreifer einen beliebigen Typ zur Deserialisierung angibt. Weitere Informationen finden Sie in den bevorzugten Alternativen.
- 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.
- Diese Option macht den Code anfällig für Denial-of-Service-Angriffe und mögliche Angriffe zur Remotecodeausführung in der Zukunft. Weitere Informationen finden Sie im Sicherheitsleitfaden für BinaryFormatter. Schränken Sie deserialisierte Typen ein. Implementieren Sie eine benutzerdefinierten System.Runtime.Serialization.SerializationBinder. Setzen Sie vor der Deserialisierung die
Binder
-Eigenschaft in allen Codepfaden auf eine Instanz Ihrer benutzerdefinierten SerializationBinder. Lösen Sie in der überschriebenen BindToType-Methode bei einem unerwarteten Typ eine Ausnahme aus, um die Deserialisierung zu stoppen.
Wann sollten Warnungen unterdrückt werden?
NetDataContractSerializer
ist unsicher und kann nicht sicher gemacht werden.
Pseudocodebeispiele
Verletzung
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
Ähnliche Regeln
CA2311: Nicht deserialisieren, ohne zuerst NetDataContractSerializer.Binder festzulegen
CA2312: Vor dem Deserialisieren sicherstellen, dass NetDataContractSerializer.Binder festgelegt ist