CA5360: Non chiamare metodi pericolosi nella deserializzazione

Proprietà valore
ID regola CA5360
Titolo Non chiamare metodi pericolosi durante la deserializzazione
Categoria Sicurezza
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

Chiamata di uno dei metodi pericolosi seguenti nella deserializzazione:

Tutti i metodi soddisfano uno dei requisiti seguenti possono essere il callback della deserializzazione:

Descrizione regola

La deserializzazione non sicura è una vulnerabilità che si verifica quando i dati non attendibili vengono usati per abusare della logica di un'applicazione, infliggere un attacco Denial of Service (DoS) o persino eseguire codice arbitrario al momento della deserializzazione. È spesso possibile che gli utenti malintenzionati abusino di queste funzionalità di deserializzazione quando l'applicazione deserializzare i dati non attendibili che sono sotto il loro controllo. In particolare, richiamare metodi pericolosi nel processo di deserializzazione. Gli attacchi di deserializzazione non sicuri potrebbero consentire a un utente malintenzionato di eseguire attacchi come attacchi DoS, bypass di autenticazione ed esecuzione remota del codice.

Come correggere le violazioni

Rimuovere questi metodi pericolosi dall'esecuzione automatica dei callback di deserializzazione. Chiamare metodi pericolosi solo dopo la convalida dell'input.

Quando eliminare gli avvisi

È possibile eliminare questa regola in modo sicuro se:

  • Si sa che l'input è attendibile. Si consideri che i limiti di attendibilità e i flussi di dati dell'applicazione possono cambiare nel tempo.
  • I dati serializzati sono a prova di manomissione. Dopo la serializzazione, firmare in modo crittografico i dati serializzati. Prima della deserializzazione, convalidare la firma crittografica. Proteggere la chiave crittografica dalla divulgazione e dalla progettazione per le rotazioni delle chiavi.
  • I dati vengono convalidati come sicuri per l'applicazione.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Esempi di pseudo-codice

Violazione

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

Soluzione

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