Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | Värde |
|---|---|
| Regel-ID | CA2300 |
| Title | Använd inte den osäkra deserialiseraren BinaryFormatter |
| Kategori | Säkerhet |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Nej |
| Tillämpliga språk | C# och Visual Basic |
Orsak
En System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserialiseringsmetod anropades eller refererades till.
Regelbeskrivning
Osäkra deserialiserare är sårbara när de-serialiserar data från icke-betrodda källor. 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.Formatters.Binary.BinaryFormatter 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 CA2301 och CA2302 i stället. Att begränsa vilka typer som kan deserialiseras kan hjälpa till att mildra kända fjärrkodkörningsattacker, men din deserialisering är fortfarande sårbar för tjänsteförnekelseattacker.
BinaryFormatter ä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, kryptografiskt signera de serialiserade uppgifterna. 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 tjänstebortfallsangrepp och möjliga angrepp för fjärrkörning av 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
Binderegenskapen 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
BinaryFormatter är osäker och kan inte göras säker.
Exempel på pseudokod
Kränkning
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
Relaterade regler
CA2301: Anropa inte BinaryFormatter.Deserialize utan att först ange BinaryFormatter.Binder