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 9 | No |
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
Aturan terkait
CA2302: Pastikan BinaryFormatter.Binder diatur sebelum memanggil BinaryFormatter.Deserialize