Bagikan melalui


CA2305: Jangan gunakan LosFormatter pendeserialisasi yang tidak aman

Properti Nilai
ID Aturan CA2305
Judul Jangan gunakan deserializer LosFormatter yang tidak aman
Golongan Keamanan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Tidak

Penyebab

Metode System.Web.UI.LosFormatter deserialisasi dipanggil atau dirujuk.

Deskripsi aturan

Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya. Serangan terhadap pendeserialisasi yang tidak aman dapat, misalnya, menjalankan perintah pada sistem operasi dasar, berkomunikasi melalui jaringan, atau menghapus file.

Aturan ini menemukan System.Web.UI.LosFormatter panggilan atau referensi metode deserialisasi.

LosFormatter tidak aman dan tidak dapat dibuat aman. Untuk informasi selengkapnya, lihat panduan keamanan BinaryFormatter.

Cara memperbaiki pelanggaran

  • Gunakan serializer aman sebagai gantinya, dan jangan izinkan penyerang menentukan jenis arbitrer untuk mendeserialisasi. Untuk informasi selengkapnya, lihat Alternatif pilihan.
  • Buat data yang diserialisasi agar tahan rusak. Setelah serialisasi, tanda tangani secara kriptografi data yang diserialisasi. Sebelum deserialisasi, validasi tanda tangan kriptografi. Lindungi kunci kriptografi agar tidak diungkapkan dan didesain untuk rotasi kunci.

Kapan harus menekan peringatan

LosFormatter tidak aman dan tidak dapat dibuat aman.

Contoh kode semu

Pelanggaran

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