CA2305: Nepoužívejte nezabezpečený deserializátor LosFormatter
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2305 |
Název | Nepoužívat nezabezpečený deserializátor LosFormatter |
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 8 | No |
Příčina
Byla System.Web.UI.LosFormatter 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.Web.UI.LosFormatter volání nebo odkazy metody deserializace.
LosFormatter
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 naleznete v tématu Upřednostňované alternativy.
- 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íčů.
Kdy potlačit upozornění
LosFormatter
je nezabezpečený a nedá se zabezpečit.
Příklady pseudokódu
Porušení
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
LosFormatter formatter = new LosFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As LosFormatter = New LosFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class