CA2305: Gebruik geen onveilige deserializer LosFormatter
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2305 |
Titel | Gebruik geen onveilige deserializer LosFormatter |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Er System.Web.UI.LosFormatter 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.Web.UI.LosFormatter .
LosFormatter
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 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.
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