Compartilhar via


CA5360: Não chamar métodos perigosos durante a desserialização

Property Valor
ID da regra CA5360
Título Não chamar métodos perigosos durante a desserialização
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Chamando um dos seguintes métodos perigosos na desserialização:

Todos os métodos atendem a um dos seguintes requisitos, podendo ser o retorno de chamada de desserialização:

Descrição da regra

A desserialização não segura é uma vulnerabilidade que ocorre quando dados não confiáveis são usados para abusar da lógica de um aplicativo, realizar um ataque DoS (negação de serviço) ou até mesmo executar códigos arbitrários após a desserialização. É muito provável que usuários mal-intencionados abusem desses recursos de desserialização quando o aplicativo está desserializando dados não confiáveis sob controle deles. Especificamente, a invocação de métodos perigosos no processo de desserialização. Ataques de desserialização não segura bem-sucedidos podem permitir que um invasor realize ataques DoS, bypasses de autenticação e execução de código remoto.

Como corrigir violações

Remova esses métodos perigosos de retornos de chamada de desserialização executados automaticamente. Chame métodos perigosos somente após validar a entrada.

Quando suprimir avisos

É seguro suprimir esta regra se:

  • Você sabe que a entrada é confiável. Considerar que o limite de confiança do seu aplicativo e os fluxos de dados podem ser alterados ao longo do tempo.
  • Os dados serializados são invioláveis. Após a serialização, assine criptograficamente os dados serializados. Antes da desserialização, valide a assinatura criptográfica. Proteja a chave de criptografia para impedir que ela seja divulgada e projete rotações de chave.
  • Os dados são validados como seguros para o aplicativo.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

#pragma warning disable CA5360
// The code that's violating the rule is on this line.
#pragma warning restore CA5360

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA5360.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        File.Copy(sourceFileName, destFileName);
    }
}

Solução

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        // Remove the potential dangerous operation.
        // File.Copy(sourceFileName, destFileName);
    }
}