Share via


CA2310: Använd inte osäker deserializer NetDataContractSerializer

Property Värde
Regel-ID CA2310
Rubrik Använd inte osäker deserializer NetDataContractSerializer
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En System.Runtime.Serialization.NetDataContractSerializer deserialiseringsmetod anropades eller refererades till.

Regelbeskrivning

Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar. En attack mot en osäker deserialiserare kan till exempel köra kommandon på det underliggande operativsystemet, kommunicera via nätverket eller ta bort filer.

Den här regeln hittar System.Runtime.Serialization.NetDataContractSerializer deserialiseringsmetodanrop eller referenser. Om du bara vill deserialisera när Binder egenskapen är inställd på att begränsa typer inaktiverar du den här regeln och aktiverar reglerna CA2311 och CA2312 i stället. Att begränsa vilka typer som kan deserialiseras kan bidra till att minimera kända fjärranslutna kodkörningsattacker, men din deserialisering är fortfarande sårbar för överbelastningsattacker.

NetDataContractSerializer är osäker och kan inte göras säker. Mer information finns i säkerhetsguiden för BinaryFormatter.

Så här åtgärdar du överträdelser

  • Använd en säker serialiserare i stället och tillåt inte att en angripare anger en godtycklig typ att deserialisera. Mer information finns i Föredragna alternativ.
  • Gör serialiserade data manipuleringssäkra. Efter serialiseringen signerar kryptografiskt serialiserade data. Verifiera den kryptografiska signaturen innan deserialiseringen. Skydda den kryptografiska nyckeln från att avslöjas och utformas för nyckelrotationer.
  • Det här alternativet gör koden sårbar för överbelastningsattacker och möjliga fjärrkörningsattacker för kod i framtiden. Mer information finns i säkerhetsguiden för BinaryFormatter. Begränsa deserialiserade typer. Implementera en anpassad System.Runtime.Serialization.SerializationBinder. Innan du deserialiserar anger du Binder egenskapen till en instans av din anpassade SerializationBinder i alla kodsökvägar. Om typen är oväntad i den åsidosatta BindToType metoden genererar du ett undantag för att stoppa deserialiseringen.

När du ska ignorera varningar

NetDataContractSerializer är osäker och kan inte göras säker.

Exempel på pseudokod

Kränkning

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: Deserialisera inte utan att först ange NetDataContractSerializer.Binder

CA2312: Kontrollera att NetDataContractSerializer.Binder har angetts innan deserialisering