Share via


CA2310: Gebruik geen onveilige deserializer NetDataContractSerializer

Eigenschappen Weergegeven als
Regel-id CA2310
Titel Gebruik geen onveilige deserializer NetDataContractSerializer
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Er System.Runtime.Serialization.NetDataContractSerializer is een deserialisatiemethode aangeroepen of waarnaar wordt verwezen.

Beschrijving van regel

Onveilige deserializers zijn kwetsbaar wanneer niet-vertrouwde gegevens worden gedeserialiseerd. Een aanvaller kan de geserialiseerde gegevens wijzigen zodat onverwachte typen worden opgenomen om objecten met schadelijke bijwerkingen te injecteren. Een aanval op een onveilig deserializer kan bijvoorbeeld opdrachten uitvoeren op het onderliggende besturingssysteem, communiceren via het netwerk of bestanden verwijderen.

Met deze regel worden aanroepen of verwijzingen naar deserialisatiemethode gevonden System.Runtime.Serialization.NetDataContractSerializer . Als u alleen deserialiseren wilt wanneer de Binder eigenschap is ingesteld om typen te beperken, schakelt u deze regel uit en schakelt u in plaats daarvan regels CA2311 en CA2312 in. Door te beperken welke typen kunnen worden gedeserialiseerd, kan dit helpen bij bekende aanvallen op het uitvoeren van externe code, maar uw deserialisatie is nog steeds kwetsbaar voor Denial of Service-aanvallen.

NetDataContractSerializer is onveilig en kan niet veilig worden gemaakt. Zie de beveiligingshandleiding binaryFormatter voor meer informatie.

Schendingen oplossen

  • Gebruik in plaats daarvan een beveiligde serialisatiefunctie en sta een aanvaller niet toe een willekeurig type op te geven dat moet worden gedeserialiseerd. Zie de voorkeursalternatieven voor meer informatie.
  • Maak de geserialiseerde gegevens manipulatiebestendig. Na serialisatie tekent u de geserialiseerde gegevens cryptografisch. Voordat deserialisatie wordt gedeserialiseerd, valideert u de cryptografische handtekening. Beveilig de cryptografische sleutel tegen openbaarmaking en ontwerp voor sleutelrotaties.
  • Deze optie maakt code kwetsbaar voor Denial of Service-aanvallen en mogelijke aanvallen voor het uitvoeren van externe code in de toekomst. Zie de beveiligingshandleiding binaryFormatter voor meer informatie. Beperk gedeserialiseerde typen. Implementeer een aangepaste System.Runtime.Serialization.SerializationBinder. Voordat u deserialiseren, stelt u de Binder eigenschap in op een exemplaar van uw aangepaste SerializationBinder in alle codepaden. Als het type onverwacht is, genereert u in de overschreven BindToType methode een uitzondering om deserialisatie te stoppen.

Wanneer waarschuwingen onderdrukken

NetDataContractSerializer is onveilig en kan niet veilig worden gemaakt.

Voorbeelden van pseudocode

Schending

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: Niet deserialiseren zonder eerst NetDataContractSerializer.Binder in te stellen

CA2312: Controleren of NetDataContractSerializer.Binder is ingesteld voordat deserialiseren