Partilhar via


CA2305: Não use o desserializador inseguro LosFormatter

Propriedade valor
ID da regra CA2305
Cargo Não use o desserializador inseguro LosFormatter
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.Web.UI.LosFormatter 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.Web.UI.LosFormatter chamadas ou referências de método de desserialização.

LosFormatter é 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 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.

Quando suprimir avisos

LosFormatter é insegura e não pode ser tornada segura.

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