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 | CA2315 |
| Título | No usar el deserializador no seguro ObjectStateFormatter |
| 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.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 llamadas al método de deserialización System.Web.UI.ObjectStateFormatter o referencias.
Cómo corregir infracciones
Si es posible, use un serializador seguro y no permita que un atacante especifique un tipo arbitrario para deserializar. Algunos serializadores más seguros incluyen lo siguiente:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer: no usar System.Web.Script.Serialization.SimpleTypeResolver nunca. Si tiene que usar un solucionador de tipos, restrinja los tipos deserializados a una lista de valores esperados.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET: use TypeNameHandling.None. Si debe usar otro valor para TypeNameHandling, limite los tipos deserializados a una lista de valores esperados utilizando un mecanismo ISerializationBinder personalizado.
- Búferes de protocolo
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
Se puede suprimir una advertencia de esta regla si:
- Sabes 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