CA5360: No llamar a métodos peligrosos durante la deserialización

Propiedad Value
Identificador de la regla CA5360
Título No llamar a métodos peligrosos durante la deserialización
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Llamar a uno de los métodos peligrosos siguientes en la deserialización:

Todos los métodos que cumplen uno de los siguientes requisitos pueden ser la devolución de llamada de deserialización:

Descripción de la regla

La deserialización no segura es una vulnerabilidad que se produce cuando los datos que no son de confianza se usan para realizar un uso indebido de la lógica de una aplicación, provocar un ataque por denegación de servicio (DoS) o incluso ejecutar código arbitrario cuando se deserializa. A menudo, es posible que los usuarios malintencionados usen indebidamente estas características de deserialización cuando la aplicación está deserializando datos que no son de confianza y están bajo su control. En concreto, la invocación de métodos peligrosos en el proceso de deserialización. Los ataques de deserialización no segura realizados correctamente pueden permitir que un atacante lleve a cabo ataques como ataques DoS, omisiones de autenticación y ejecución remota de código.

Cómo corregir infracciones

Evite que estos métodos peligrosos ejecuten automáticamente devoluciones de llamada de deserialización. Llame a métodos peligrosos solo después de validar la entrada.

Cuándo suprimir las advertencias

Se puede suprimir esta regla si:

  • Sabe que la entrada es de confianza. Considera que el límite de confianza de la aplicación y los flujos de datos pueden cambiar con el tiempo.
  • Los datos serializados están protegidos frente a posibles alteraciones. Después de la serialización, firme criptográficamente los datos serializados. Antes de la deserialización, valide la firma criptográfica. Proteja la clave criptográfica para que no se revele y diseñe las rotaciones de clave.
  • Los datos se validan como seguros para la aplicación.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

Infracción

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

Solución

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