CA2305: Não usar o desserializador inseguro LosFormatter

Property Valor
ID da regra CA2305
Título Não usar o desserializador inseguro LosFormatter
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Um método de desserialização System.Web.UI.LosFormatter foi chamado ou referenciado.

Descrição da regra

Desserializadores não seguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados visando incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados. Um ataque contra um desserializador não seguro poderia, por exemplo, executar comandos no sistema operacional subjacente, realizar comunicações pela rede ou excluir arquivos.

Essa regra localiza referências ou chamadas de método de desserialização System.Web.UI.LosFormatter.

LosFormatter não é seguro e não pode ser transformado em seguro. Para saber mais, confira o Guia de segurança do BinaryFormatter.

Como corrigir violações

  • Use um serializador seguro como alternativa e não permita que um invasor especifique um tipo arbitrário a ser desserializado. Para obter mais informações, confira Alternativas preferenciais.
  • 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

LosFormatter não é seguro e não pode ser transformado em seguro.

Exemplos de pseudocódigo

Violação

using System.IO;
using System.Web.UI;

public class ExampleClass
{
    public object MyDeserialize(byte[] bytes)
    {
        LosFormatter formatter = new LosFormatter();
        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 LosFormatter = New LosFormatter()
        Return formatter.Deserialize(New MemoryStream(bytes))
    End Function
End Class