Bagikan melalui


CA2310: Jangan gunakan NetDataContractSerializer pendeserialisasi yang tidak aman

Properti Nilai
ID Aturan CA2310
Judul Jangan gunakan deserializer NetDataContractSerializer 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.NetDataContractSerializer 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.NetDataContractSerializer panggilan atau referensi metode deserialisasi. Jika Anda hanya ingin mendeserialisasi saat Binder properti diatur untuk membatasi jenis, nonaktifkan aturan ini dan aktifkan aturan CA2311 dan CA2312 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.

NetDataContractSerializer 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

NetDataContractSerializer tidak aman dan tidak dapat dibuat aman.

Contoh kode semu

Pelanggaran

using System.IO;
using System.Runtime.Serialization;

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

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

CA2311: Jangan mendeserialisasi tanpa terlebih dahulu mengatur NetDataContractSerializer.Binder

CA2312: Pastikan NetDataContractSerializer.Binder diatur sebelum mendeserialisasi