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 9 aktiviert | No |
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
Ähnliche Regeln
CA2301: BinaryFormatter.Deserialize nicht ohne Festlegung von BinaryFormatter.Binder aufrufen