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