Bagikan melalui


Risiko deserialisasi dalam penggunaan BinaryFormatter dan jenis terkait

Artikel ini berlaku untuk kontainer berikut:

Artikel ini berlaku untuk implementasi .NET berikut:

  • .NET Framework semua versi
  • .NET Core 2.1 - 3.1
  • .NET 5 dan yang lebih baru

Perhatian

Jenisnya BinaryFormatter berbahaya dan tidak disarankan untuk pemrosesan data. Aplikasi harus berhenti menggunakan BinaryFormatter sesegera mungkin, bahkan jika mereka percaya data yang mereka proses dapat dipercaya. BinaryFormatter tidak aman dan tidak dapat dibuat aman.

Catatan

Mulai dari .NET 9, implementasi dalam kotak BinaryFormatter melemparkan pengecualian saat digunakan, bahkan dengan pengaturan yang sebelumnya mengaktifkan penggunaannya. Pengaturan tersebut juga dihapus. Lihat panduan migrasi BinaryFormatter untuk informasi selengkapnya.

Kerentanan deserialisasi

Kerentanan deserialisasi adalah kategori ancaman di mana payload permintaan diproses dengan tidak aman. Penyerang yang berhasil memanfaatkan kerentanan ini terhadap aplikasi dapat menyebabkan penolakan layanan (DoS), pengungkapan informasi, atau eksekusi kode jarak jauh di dalam aplikasi target. Kategori risiko ini secara konsisten membuat OWASP Top 10. Target termasuk aplikasi yang ditulis dalam berbagai bahasa, termasuk C/C++, Java, dan C#.

Di .NET, target risiko terbesar adalah aplikasi yang menggunakan BinaryFormatter jenis untuk mendeserialisasikan data. BinaryFormatter banyak digunakan di seluruh ekosistem .NET karena kekuatannya dan kemudahan penggunaannya. Namun, kekuatan yang sama ini memberi penyerang kemampuan untuk memengaruhi alur kontrol dalam aplikasi target. Serangan yang berhasil dapat mengakibatkan penyerang dapat menjalankan kode dalam konteks proses target.

Sebagai analogi yang lebih sederhana, asumsikan bahwa memanggil BinaryFormatter.Deserialize melalui payload setara dengan menafsirkan payload tersebut sebagai dapak dieksekusi mandiri dan meluncurkannya.

Kerentanan keamanan BinaryFormatter

Peringatan

Metode BinaryFormatter.Deserialize ini tidak pernah aman ketika digunakan dengan input yang tidak tepercaya. Kami sangat menyarankan agar konsumen mempertimbangkan untuk menggunakan salah satu alternatif yang diuraikan nanti dalam dokumen ini.

BinaryFormatter diimplementasikan sebelum kerentanan deserialisasi adalah kategori ancaman yang dipahami dengan baik. Akibatnya, kode tidak mengikuti praktik terbaik modern. Metode ini Deserialize dapat digunakan sebagai vektor bagi penyerang untuk melakukan serangan DoS terhadap penggunaan aplikasi. Serangan ini mungkin membuat layanan web tidak responsif atau mengakibatkan penghentian proses yang tidak terduga. Kategori serangan ini tidak dapat dimitigasi dengan SerializationBinder atau sakelar konfigurasi lainnya BinaryFormatter. .NET menganggap perilaku ini dirancang dan tidak akan mengeluarkan pembaruan kode untuk mengubah perilaku.

BinaryFormatter.Deserialize mungkin rentan terhadap kategori serangan lain, seperti pengungkapan informasi atau eksekusi kode jarak jauh. Memanfaatkan fitur seperti kustom SerializationBinder mungkin tidak cukup untuk mengurangi risiko ini dengan benar. Kemungkinan ada bahwa kerentanan baru akan ditemukan di mana .NET tidak dapat secara praktis menerbitkan pembaruan keamanan. Konsumen harus menilai skenario individu mereka dan mempertimbangkan potensi paparan mereka terhadap risiko ini.

Sebaiknya BinaryFormatter konsumen melakukan penilaian risiko individual pada aplikasi mereka. Konsumen bertanggung jawab sepenuhnya untuk menentukan apakah akan menggunakan BinaryFormatter. Jika Anda mempertimbangkan untuk menggunakannya, Anda harus menilai risiko konsekuensi keamanan, teknis, reputasi, hukum, dan peraturan.

Alternatif yang disukai

.NET menawarkan beberapa serializer yang dapat menangani data yang tidak tepercaya dengan aman:

Alternatif berbahaya

Hindari serializer berikut:

Serializer sebelumnya semuanya melakukan deserialisasi polimorfik yang tidak dibatasi dan berbahaya, seperti BinaryFormatter.

Risiko asumsi data dapat dipercaya

Sering kali, pengembang aplikasi mungkin percaya bahwa mereka hanya memproses input tepercaya. Kasus input yang aman benar dalam beberapa keadaan yang jarang terjadi. Tetapi jauh lebih umum bahwa payload melewati batas kepercayaan tanpa pengembang menyadarinya.

Pertimbangkan server lokal di mana karyawan menggunakan klien desktop dari stasiun kerja mereka untuk berinteraksi dengan layanan. Skenario ini mungkin terlihat naif sebagai pengaturan "aman" di mana pemanfaatan BinaryFormatter dapat diterima. Namun, skenario ini menyajikan vektor untuk malware yang mendapatkan akses ke satu mesin karyawan untuk dapat menyebar ke seluruh perusahaan. Malware tersebut dapat memanfaatkan penggunaan BinaryFormatter perusahaan untuk bergerak secara lateral dari stasiun kerja karyawan ke server backend. Kemudian dapat menyelundupkan data sensitif perusahaan. Data tersebut dapat mencakup rahasia dagang atau data pelanggan.

Pertimbangkan juga aplikasi yang menggunakan BinaryFormatter untuk mempertahankan status penyimpanan. Ini mungkin pada awalnya merupakan skenario yang aman, karena membaca dan menulis data di hard drive Anda sendiri mewakili ancaman kecil. Namun, berbagi dokumen di seluruh email atau internet adalah umum, dan sebagian besar pengguna akhir tidak akan melihat pembukaan file yang diunduh ini sebagai perilaku berisiko.

Skenario ini dapat dimanfaatkan untuk efek jahat. Jika aplikasi adalah game, pengguna yang berbagi file simpan tanpa sadar menempatkan diri mereka dalam risiko. Pengembang itu sendiri juga dapat ditargetkan. Penyerang mungkin mengirim email ke dukungan teknis pengembang, melampirkan file data berbahaya dan meminta staf dukungan untuk membukanya. Serangan semacam ini dapat memberi penyerang pijakan di perusahaan.

Skenario lain adalah tempat file data disimpan di penyimpanan cloud dan secara otomatis disinkronkan antara komputer pengguna. Penyerang yang mampu mendapatkan akses ke akun penyimpanan cloud dapat meracuni file data. File data ini akan disinkronkan secara otomatis ke komputer pengguna. Lain kali pengguna membuka file data, payload penyerang berjalan. Dengan demikian penyerang dapat memanfaatkan kompromi akun penyimpanan cloud untuk mendapatkan izin eksekusi kode penuh.

Pertimbangkan aplikasi yang berpindah dari model penginstalan desktop ke model cloud-first. Skenario ini mencakup aplikasi yang berpindah dari aplikasi desktop atau model klien kaya ke model berbasis web. Model ancaman apa pun yang diambil untuk aplikasi desktop belum tentu berlaku untuk layanan berbasis cloud. Model ancaman untuk aplikasi desktop mungkin mengabaikan ancaman yang diberikan sebagai "tidak menarik bagi klien untuk menyerang dirinya sendiri". Tetapi ancaman yang sama mungkin menjadi menarik ketika menganggap pengguna jarak jauh (klien) menyerang layanan cloud itu sendiri.

Catatan

Secara umum, niat serialisasi adalah untuk mengirimkan objek ke dalam atau ke luar aplikasi. Latihan pemodelan ancaman hampir selalu menandai transfer data semacam ini sebagai melewati batas kepercayaan.

Lihat juga