Teilen über


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 8 aktiviert Nein

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

CA2311: Nicht deserialisieren, ohne zuerst NetDataContractSerializer.Binder festzulegen

CA2312: Vor dem Deserialisieren sicherstellen, dass NetDataContractSerializer.Binder festgelegt ist