CA2305: Gebruik geen onveilige deserializer LosFormatter

Eigenschap Waarde
Regel-id CA2305
Titel Gebruik geen onveilige deserializer LosFormatter
Categorie Beveiliging
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Nee
Toepasselijke talen C# en Visual Basic

Oorzaak

Een System.Web.UI.LosFormatter deserialisatiemethode is 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 de deserialisatiemethode System.Web.UI.LosFormatter gevonden.

LosFormatter is onveilig en kan niet veilig worden gemaakt. Zie de beveiligingshandleiding binaryFormatter voor meer informatie.

Hoe schendingen op te lossen

  • Gebruik in plaats daarvan een beveiligde serialisatiefunctie en sta een aanvaller niet toe een willekeurig type op te geven dat moet worden gedeserialiseerd. Zie Voorkeursalternatieven voor meer informatie.
  • Maak de geserialiseerde gegevens manipulatiebestendig. Na serialisatie tekent u de geserialiseerde gegevens cryptografisch. Valideer de cryptografische handtekening voordat deserialisatie plaatsvindt. Beveilig de cryptografische sleutel tegen openbaarmaking en ontwerp voor sleutelrotaties.

Wanneer waarschuwingen onderdrukken

LosFormatter is onveilig en kan niet veilig worden gemaakt.

Voorbeelden van pseudocode

Schending

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