Teilen über


CA2300: Nicht den unsicheren BinaryFormatter zur Deserialisierung verwenden

Eigenschaft Wert
Regel-ID CA2300
Titel Nicht den unsicheren BinaryFormatter zur Deserialisierung verwenden
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.Formatters.Binary.BinaryFormatter 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.Formatters.Binary.BinaryFormatter 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 CA2301 und CA2302. 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.

BinaryFormatter 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?

BinaryFormatter ist unsicher und kann nicht sicher gemacht werden.

Pseudocodebeispiele

Verletzung

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class ExampleClass
{
    public object MyDeserialize(byte[] bytes)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        return formatter.Deserialize(new MemoryStream(bytes));
    }
}
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

Public Class ExampleClass
    Public Function MyDeserialize(bytes As Byte()) As Object
        Dim formatter As BinaryFormatter = New BinaryFormatter()
        Return formatter.Deserialize(New MemoryStream(bytes))
    End Function
End Class

CA2301: BinaryFormatter.Deserialize nicht ohne Festlegung von BinaryFormatter.Binder aufrufen

CA2302: Festlegung von BinaryFormatter.Binder vor dem Aufruf von BinaryFormatter.Deserialize sicherstellen