Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA2310 |
| Titel | Gebruik geen onveilige deserializer NetDataContractSerializer |
| 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.Runtime.Serialization.NetDataContractSerializer 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.Runtime.Serialization.NetDataContractSerializer gevonden. Als u alleen deserialiseren wilt wanneer de Binder eigenschap is ingesteld om typen te beperken, schakelt u deze regel uit en schakelt u in plaats daarvan regels CA2311 en CA2312 in. Door te beperken welke typen kunnen worden gedeserialiseerd, kan dit helpen bij bekende aanvallen op het uitvoeren van externe code, maar uw deserialisatie is nog steeds kwetsbaar voor Denial of Service-aanvallen.
NetDataContractSerializer 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 de 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.
- Deze optie maakt code kwetsbaar voor Denial of Service-aanvallen en mogelijke aanvallen voor het uitvoeren van externe code in de toekomst. Zie de beveiligingshandleiding binaryFormatter voor meer informatie. Beperk gedeserialiseerde typen. Implementeer een aangepaste System.Runtime.Serialization.SerializationBinder. Voordat u het deserialiseren start, stelt u de
Bindereigenschap in op een exemplaar van uw aangepaste SerializationBinder in alle codepaden. Als het type onverwacht is, genereert u in de overschreven BindToType methode een uitzondering om deserialisatie te stoppen.
Wanneer waarschuwingen onderdrukken
NetDataContractSerializer is onveilig en kan niet veilig worden gemaakt.
Voorbeelden van pseudocode
Schending
using System.IO;
using System.Runtime.Serialization;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
NetDataContractSerializer serializer = new NetDataContractSerializer();
return serializer.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Runtime.Serialization
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim serializer As NetDataContractSerializer = New NetDataContractSerializer()
Return serializer.Deserialize(New MemoryStream(bytes))
End Function
End Class
Gerelateerde regels
CA2311: Niet deserialiseren zonder eerst NetDataContractSerializer.Binder in te stellen
CA2312: Zorg ervoor dat NetDataContractSerializer.Binder is ingesteld voordat u deserialiseert