Delen via


CA2300: Gebruik geen onveilige deserializer BinaryFormatter

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

Oorzaak

Er System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 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.Formatters.Binary.BinaryFormatter . 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 CA2301 en CA2302 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.

BinaryFormatter 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

BinaryFormatter is onveilig en kan niet veilig worden gemaakt.

Voorbeelden van pseudocode

Schending

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: Roep BinaryFormatter.Deserialize niet aan zonder eerst BinaryFormatter.Binder in te stellen

CA2302: Controleren of BinaryFormatter.Binder is ingesteld voordat binaryFormatter.Deserialize wordt aangeroepen