CA2300: Nepoužívejte nezabezpečený deserializátor BinaryFormatter
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2300 |
Název | Nepoužívat nezabezpečený deserializátor BinaryFormatter |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | No |
Příčina
Byla System.Runtime.Serialization.Formatters.Binary.BinaryFormatter volána nebo odkazována metoda deserializace.
Popis pravidla
Nezabezpečené deserializátory jsou zranitelné při deserializaci nedůvěryhodných dat. Útočník by mohl serializovaná data upravit tak, aby zahrnovala neočekávané typy pro vložení objektů se škodlivými vedlejšími účinky. Útok na nezabezpečený deserializátor může například spouštět příkazy v podkladovém operačním systému, komunikovat přes síť nebo odstraňovat soubory.
Toto pravidlo najde System.Runtime.Serialization.Formatters.Binary.BinaryFormatter volání nebo odkazy metody deserializace. Pokud chcete deserializovat pouze v případě Binder , že je vlastnost nastavena na omezení typů, zakažte toto pravidlo a povolte pravidla CA2301 a CA2302 místo toho. Omezení typů, které je možné deserializovat, může pomoct zmírnit proti známým útokům vzdáleného spuštění kódu, ale vaše deserializace bude stále zranitelná vůči útokům na dostupnost služby.
BinaryFormatter
je nezabezpečený a nedá se zabezpečit. Další informace naleznete v průvodci zabezpečením BinaryFormatter.
Jak opravit porušení
- Místo toho použijte zabezpečený serializátor a nepovolte útočníkovi zadat libovolný typ deserializace. Další informace najdete v upřednostňovaných alternativách.
- Zfalšujte serializovaná data a zfalšujte je. Po serializaci kryptograficky podepisujte serializovaná data. Před deserializací ověřte kryptografický podpis. Chraňte kryptografický klíč před zveřejněním a návrhem obměny klíčů.
- Díky této možnosti je kód v budoucnu zranitelný vůči útokům na dostupnost služby a možným útokům vzdáleného spuštění kódu. Další informace naleznete v průvodci zabezpečením BinaryFormatter. Omezit deserializované typy Implementace vlastního System.Runtime.Serialization.SerializationBindersouboru . Před deserializací nastavte
Binder
vlastnost na instanci vlastní SerializationBinder ve všech cestách kódu. V přepsání BindToType metoda, pokud typ je neočekávaný, vyvolá výjimku pro zastavení deserializace.
Kdy potlačit upozornění
BinaryFormatter
je nezabezpečený a nedá se zabezpečit.
Příklady pseudokódu
Porušení
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
Související pravidla
CA2301: Nevolejte BinaryFormatter.Deserialize bez prvního nastavení BinaryFormatter.Binder
CA2302: Před voláním BinaryFormatter.Deserialize se ujistěte, že je nastaven binaryFormatter.Binder