CA5360: Geen gevaarlijke methoden aanroepen in deserialisatie

Eigenschap Waarde
Regel-id CA5360
Titel Roep geen gevaarlijke methoden aan bij deserialisatie
Categorie Beveiliging
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Nee
Toepasselijke talen C# en Visual Basic

Oorzaak

Het aanroepen van een van de volgende gevaarlijke methoden tijdens het deserialisatieproces:

Alle methoden die aan een van de volgende vereisten voldoen, 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.

Hoe schendingen op te lossen

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 betrouwbaar is. 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. Valideer de cryptografische handtekening voordat deserialisatie plaatsvindt. 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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.

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);
    }
}