Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA2310 |
| Título | No usar el deserializador no seguro NetDataContractSerializer |
| Categoría | Seguridad |
| El arreglo es problemático o no problemático | Sin interrupción |
| Habilitado de forma predeterminada en .NET 10 | No |
| Idiomas aplicables | C# y Visual Basic |
Causa
Se llamó o se hizo referencia a un método de deserialización System.Runtime.Serialization.NetDataContractSerializer.
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 llamadas al método de deserialización System.Runtime.Serialization.NetDataContractSerializer o referencias. Si quiere deserializar solo cuando la propiedad Binder está establecida para restringir tipos, deshabilite esta regla y habilite las reglas CA2311 y CA2312 en su lugar. Limitar los tipos que se pueden deserializar puede ayudar a mitigar los ataques de ejecución remota de código conocidos, pero la deserialización seguirá siendo vulnerable a los ataques por denegación de servicio.
NetDataContractSerializer 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 obtener más información, vea 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 rotaciones de clave.
- Esta opción hace que el código sea vulnerable a ataques por denegación de servicio y posibles ataques de ejecución remota de código en el futuro. Para obtener más información, vea Guía de seguridad de BinaryFormatter. Restrinja los tipos deserializados. Implemente un elemento System.Runtime.Serialization.SerializationBinder personalizado. Antes de la deserialización, establezca la propiedad
Binderen una instancia del elemento SerializationBinder personalizado en todas las rutas de acceso del código. En el método BindToType invalidado, si el tipo es inesperado, lance una excepción para detener la deserialización.
Cuándo suprimir las advertencias
NetDataContractSerializer no es seguro y no se puede convertir en seguro.
Ejemplos de pseudocódigo
Infracción
using System.IO;
using System.Runtime.Serialization;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
NetDataContractSerializer serializer = new NetDataContractSerializer();
return serializer.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Runtime.Serialization
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim serializer As NetDataContractSerializer = New NetDataContractSerializer()
Return serializer.Deserialize(New MemoryStream(bytes))
End Function
End Class
Reglas relacionadas
CA2311: No deserialice sin establecer primero NetDataContractSerializer.Binder
CA2312: Asegúrate de que NetDataContractSerializer.Binder esté establecido antes de deserializar