Share via


CA5360: Geen gevaarlijke methoden aanroepen in deserialisatie

Eigenschappen Weergegeven als
Regel-id CA5360
Titel Geen gevaarlijke methoden aanroepen in deserialisatie
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Het aanroepen van een van de volgende gevaarlijke methoden in deserialisatie:

Alle methoden voldoen aan een van de volgende vereisten kunnen de callback van deserialisatie zijn:

Beschrijving van regel

Onveilig deserialisatie is een beveiligingsprobleem dat optreedt wanneer niet-vertrouwde gegevens worden gebruikt om de logica van een toepassing te misbruiken, een DoS-aanval (Denial-of-Service) toe te brengen of zelfs willekeurige code uit te voeren wanneer deze wordt gedeserialiseerd. Het is vaak mogelijk dat kwaadwillende gebruikers deze deserialisatiefuncties misbruiken wanneer de toepassing niet-vertrouwde gegevens deserialiseert die onder hun beheer valt. Roep met name gevaarlijke methoden aan bij het deserialisatieproces. Met geslaagde onveilige deserialisatieaanvallen kan een aanvaller aanvallen uitvoeren, zoals DoS-aanvallen, verificatie-bypasss en uitvoering van externe code.

Schendingen oplossen

Verwijder deze gevaarlijke methoden uit het automatisch uitvoeren van callbacks voor deserialisatie. Roep gevaarlijke methoden alleen aan nadat de invoer is geverifieerd.

Wanneer waarschuwingen onderdrukken

Het is veilig om deze regel te onderdrukken als:

  • U weet dat de invoer wordt vertrouwd. Houd er rekening mee dat de vertrouwensgrens en gegevensstromen van uw toepassing na verloop van tijd kunnen veranderen.
  • De geserialiseerde gegevens zijn 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.
  • De gegevens worden gevalideerd als veilig voor de toepassing.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA5360
// The code that's violating the rule is on this line.
#pragma warning restore CA5360

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA5360.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Voorbeelden van pseudocode

Schending

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        File.Copy(sourceFileName, destFileName);
    }
}

Oplossing

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        // Remove the potential dangerous operation.
        // File.Copy(sourceFileName, destFileName);
    }
}