CA2305: No usar el deserializador no seguro LosFormatter
Propiedad | Value |
---|---|
Identificador de la regla | CA2305 |
Título | No usar el deserializador no seguro LosFormatter |
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.LosFormatter.
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.LosFormatter.
LosFormatter
no es seguro y no se puede convertir en seguro. Para obtener más información, vea Guía de seguridad de BinaryFormatter.
Cómo corregir infracciones
- En su lugar, use un serializador seguro y no permita que un atacante especifique un tipo arbitrario para deserializar. Para más información, consulte Alternativas preferidas.
- Proteja los datos serializados contra 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.
Cuándo suprimir las advertencias
LosFormatter
no es seguro y no se puede convertir en seguro.
Ejemplos de pseudocódigo
Infracción
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
LosFormatter formatter = new LosFormatter();
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 LosFormatter = New LosFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class