CA2315: No usar el deserializador no seguro ObjectStateFormatter

Propiedad Value
Identificador de la regla CA2315
Título No usar el deserializador no seguro ObjectStateFormatter
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Se llamó o se hizo referencia a un método de deserialización System.Web.UI.ObjectStateFormatter.

Descripción de la regla

Los deserializadores no seguros son vulnerables al deserializar datos que no son de confianza. Un atacante podría modificar los datos serializados para incluir tipos inesperados a fin de insertar objetos con efectos secundarios malintencionados. Un ataque contra un deserializador inseguro podría, por ejemplo, ejecutar comandos en el sistema operativo subyacente, comunicarse a través de la red o eliminar archivos.

Esta regla busca referencias o llamadas al método de deserialización System.Web.UI.ObjectStateFormatter.

Cómo corregir infracciones

Cuándo suprimir las advertencias

Se puede suprimir una advertencia de 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.
  • Ha tomado una de las precauciones indicadas en Cómo corregir infracciones.

Ejemplos de pseudocódigo

Infracción

using System.IO;
using System.Web.UI;

public class ExampleClass
{
    public object MyDeserialize(byte[] bytes)
    {
        ObjectStateFormatter formatter = new ObjectStateFormatter();
        return formatter.Deserialize(new MemoryStream(bytes));
    }
}
Imports System.IO
Imports System.Web.UI

Public Class ExampleClass
    Public Function MyDeserialize(bytes As Byte()) As Object
        Dim formatter As ObjectStateFormatter = New ObjectStateFormatter()
        Return formatter.Deserialize(New MemoryStream(bytes))
    End Function
End Class