Bagikan melalui


CA2300: Jangan gunakan BinaryFormatter pendeserialisasi yang tidak aman

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

Penyebab

Metode System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 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.Runtime.Serialization.Formatters.Binary.BinaryFormatter panggilan atau referensi metode deserialisasi. Jika Anda hanya ingin mendeserialisasi saat Binder properti diatur untuk membatasi jenis, nonaktifkan aturan ini dan aktifkan aturan CA2301 dan CA2302 sebagai gantinya. Membatasi jenis mana yang dapat dideserialisasi dapat membantu mengurangi serangan eksekusi kode jarak jauh yang diketahui, tetapi deserialisasi Anda masih akan rentan terhadap penolakan serangan layanan.

BinaryFormatter 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.
  • Opsi ini membuat kode rentan terhadap penolakan serangan layanan dan kemungkinan serangan eksekusi kode jarak jauh di masa depan. Untuk informasi selengkapnya, lihat panduan keamanan BinaryFormatter. Batasi jenis yang dideserialisasi. Terapkan kustom System.Runtime.Serialization.SerializationBinder. Sebelum deserialisasi, atur Binder properti ke instans kustom SerializationBinder Anda di semua jalur kode. Dalam metode yang ditimpa BindToType , jika jenisnya tidak terduga, berikan pengecualian untuk menghentikan deserialisasi.

Kapan harus menekan peringatan

BinaryFormatter tidak aman dan tidak dapat dibuat aman.

Contoh kode semu

Pelanggaran

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class ExampleClass
{
    public object MyDeserialize(byte[] bytes)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        return formatter.Deserialize(new MemoryStream(bytes));
    }
}
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

Public Class ExampleClass
    Public Function MyDeserialize(bytes As Byte()) As Object
        Dim formatter As BinaryFormatter = New BinaryFormatter()
        Return formatter.Deserialize(New MemoryStream(bytes))
    End Function
End Class

CA2301: Jangan panggil BinaryFormatter.Deserialize tanpa terlebih dahulu mengatur BinaryFormatter.Binder

CA2302: Pastikan BinaryFormatter.Binder diatur sebelum memanggil BinaryFormatter.Deserialize