Compartilhar via


CA2362: DataSet ou DataTable não seguros em um tipo serializável gerado automaticamente podem ser vulneráveis a ataques de execução remota de código

Property Valor
ID da regra CA2362
Título DataSet ou DataTable não seguros em um tipo serializável gerado automaticamente podem ser vulneráveis a ataques de execução remota de código
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 9 Não

Causa

Uma classe ou estrutura marcada com SerializableAttribute contém um campo ou propriedade DataSet ou DataTable e tem um DesignerCategoryAttribute.

CA2352 é uma regra semelhante, para quando não há um DesignerCategoryAttribute.

Descrição da regra

Ao desserializar a entrada não confiável com BinaryFormatter e o grafo de objeto desserializado contém um DataSet ou um DataTable, um invasor pode criar um conteúdo mal-intencionado para executar um ataque de execução de código remoto.

Essa regra é como CA2352, mas para código gerado automaticamente para uma representação na memória de dados em um aplicativo de GUI. Normalmente, essas classes geradas automaticamente não são desserializadas de entrada não confiável. O uso do seu aplicativo pode variar.

Essa regra localiza os tipos que não são seguros quando desserializados. Se o código não desserializar os tipos encontrados, você não terá uma vulnerabilidade de desserialização.

Para obter mais informações, confira Diretrizes de segurança do DataSet e da DataTable.

Como corrigir violações

  • Se possível, use o Entity Framework em vez de DataSet e DataTable.
  • Torne os dados serializados à prova de adulteração. Após a serialização, assine criptograficamente os dados serializados. Antes da desserialização, valide a assinatura criptográfica. Proteja a chave criptográfica para impedir que ela seja divulgada e projete rotações de chave.

Quando suprimir avisos

É seguro suprimir um aviso dessa regra se:

  • O tipo encontrado por essa regra nunca é desserializado, direta ou indiretamente.
  • Você sabe que a entrada é confiável. Considere que o limite de confiança do seu aplicativo e os fluxos de dados podem ser alterados ao longo do tempo.
  • Você tiver tomado uma das precauções descritas em Como corrigir violações.

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 CA2362
// The code that's violating the rule is on this line.
#pragma warning restore CA2362

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.CA2362.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.Data;
using System.Xml.Serialization;

namespace ExampleNamespace
{
    [global::System.CodeDom.Compiler.GeneratedCode(""System.Data.Design.TypedDataSetGenerator"", ""2.0.0.0"")]
    [global::System.Serializable()]
    [global::System.ComponentModel.DesignerCategoryAttribute(""code"")]
    [global::System.ComponentModel.ToolboxItem(true)]
    [global::System.Xml.Serialization.XmlSchemaProviderAttribute(""GetTypedDataSetSchema"")]
    [global::System.Xml.Serialization.XmlRootAttribute(""Package"")]
    [global::System.ComponentModel.Design.HelpKeywordAttribute(""vs.data.DataSet"")]
    public class ExampleClass : global::System.Data.DataSet {
        private DataTable table;
    }
}

CA2350: verifique se a entrada do DataTable.ReadXml() é confiável

CA2351: verifique se a entrada do DataSet.ReadXml() é confiável

CA2352: DataSet ou DataTable não seguros no tipo serializável podem ser vulneráveis a ataques de execução de código remoto

CA2353: DataSet ou DataTable não seguros no tipo serializável

CA2354: DataSet ou DataTable não seguros no grafo de objetos desserializados podem ser vulneráveis a ataques de execução de código remoto

CA2355: DataSet ou DataTable não seguros no grafo de objetos desserializados

CA2356: DataSet ou DataTable não seguro no grafo de objetos desserializados da Web

CA2362: DataSet ou DataTable não seguros em um tipo serializável gerado automaticamente podem ser vulneráveis a ataques de execução remota de código