CA2310: Não use o desserializador inseguro NetDataContractSerializer
Propriedade | valor |
---|---|
ID da regra | CA2310 |
Cargo | Não use o desserializador inseguro NetDataContractSerializer |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
Um System.Runtime.Serialization.NetDataContractSerializer método de desserialização foi chamado ou referenciado.
Descrição da regra
Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados. Um ataque contra um desserializador inseguro pode, por exemplo, executar comandos no sistema operacional subjacente, se comunicar pela rede ou excluir arquivos.
Esta regra localiza System.Runtime.Serialization.NetDataContractSerializer chamadas ou referências de método de desserialização. Se você quiser desserializar somente quando a Binder propriedade estiver definida para restringir tipos, desative essa regra e habilite as regras CA2311 e CA2312 . Limitar quais tipos podem ser desserializados pode ajudar a mitigar ataques conhecidos de execução remota de código, mas sua desserialização ainda estará vulnerável a ataques de negação de serviço.
NetDataContractSerializer
é insegura e não pode ser tornada segura. Para obter mais informações, consulte o guia de segurança BinaryFormatter.
Como corrigir violações
- Em vez disso, use um serializador seguro e não permita que um invasor especifique um tipo arbitrário para desserializar. Para obter mais informações, consulte as alternativas preferidas.
- Torne os dados serializados invioláveis. Após a serialização, assine criptograficamente os dados serializados. Antes da desserialização, valide a assinatura criptográfica. Proteja a chave criptográfica de ser divulgada e projete rotações de chave.
- Essa opção torna o código vulnerável a ataques de negação de serviço e possíveis ataques de execução remota de código no futuro. Para obter mais informações, consulte o guia de segurança BinaryFormatter. Restrinja tipos desserializados. Implemente um arquivo System.Runtime.Serialization.SerializationBinder. Antes de desserializar, defina a
Binder
propriedade como uma instância do seu costume SerializationBinder em todos os caminhos de código. No método substituído BindToType , se o tipo for inesperado, lance uma exceção para interromper a desserialização.
Quando suprimir avisos
NetDataContractSerializer
é insegura e não pode ser tornada segura.
Exemplos de pseudocódigo
Violação
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
Regras conexas
CA2311: Não desserialize sem primeiro definir NetDataContractSerializer.Binder
CA2312: Verifique se NetDataContractSerializer.Binder está definido antes de desserializar