Aracılığıyla paylaş


CA2300: Güvenli olmayan seri durumdan çıkarıcı BinaryFormatter kullanmayın

Özellik Değer
Kural Kimliği CA2300
Başlık Güvenli olmayan seri durumdan çıkarıcı BinaryFormatter kullanmayın
Kategori Güvenlik
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 9'da varsayılan olarak etkin Hayır

Neden

Seri System.Runtime.Serialization.Formatters.Binary.BinaryFormatter durumdan çıkarma yöntemi çağrıldı veya başvuruldu.

Kural açıklaması

Güvenilmeyen verilerin seri durumdan çıkarılması sırasında güvenli olmayan seri durumdan çıkarıcılar savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir. Güvenli olmayan bir seri durumdan çıkarıcıya yönelik bir saldırı, örneğin, temel işletim sisteminde komut yürütebilir, ağ üzerinden iletişim kurabilir veya dosyaları silebilir.

Bu kural seri durumdan çıkarma yöntemi çağrılarını veya başvurularını bulur System.Runtime.Serialization.Formatters.Binary.BinaryFormatter . Yalnızca özellik türleri kısıtlamak üzere ayarlandığında seri durumdan Binder çıkarmak istiyorsanız, bu kuralı devre dışı bırakın ve bunun yerine CA2301 ve CA2302 kurallarını etkinleştirin. Hangi türlerin seri durumdan çıkarılabileceğini sınırlamak, bilinen uzaktan kod yürütme saldırılarına karşı azaltmaya yardımcı olabilir, ancak seri durumdan çıkarma işleminiz hizmet reddi saldırılarına karşı savunmasız olmaya devam eder.

BinaryFormatter güvenli değildir ve güvenli hale getirilemiyor. Daha fazla bilgi için bkz . BinaryFormatter güvenlik kılavuzu.

İhlalleri düzeltme

  • Bunun yerine güvenli bir seri hale getirici kullanın ve bir saldırganın seri durumdan çıkarmak için rastgele bir tür belirtmesine izin verme. Daha fazla bilgi için bkz . Tercih edilen alternatifler.
  • Serileştirilmiş verilerin kurcalanmaya karşı dayanıklı olmasını sağlayın. Serileştirmeden sonra, serileştirilmiş verileri şifreli olarak imzalayın. Seri durumdan çıkarmadan önce şifreleme imzasını doğrulayın. Şifreleme anahtarının açıklanmasını önleyip anahtar döndürmeleri için tasarım yapma.
  • Bu seçenek, gelecekte kodu hizmet reddi saldırılarına ve olası uzaktan kod yürütme saldırılarına karşı savunmasız hale getirir. Daha fazla bilgi için bkz . BinaryFormatter güvenlik kılavuzu. Seri durumdan çıkarılmış türleri kısıtlayın. Özel System.Runtime.Serialization.SerializationBinderbir uygulayın. Seri durumdan Binder çıkarmadan önce, özelliğini tüm kod yollarında özel SerializationBinder örneğinize ayarlayın. Geçersiz kılınan BindToType yönteminde, tür beklenmeyense seri durumdan çıkarma işlemini durdurmak için bir özel durum oluşturun.

Uyarıların ne zaman bastırılması gerekiyor?

BinaryFormatter güvenli değildir ve güvenli hale getirilemiyor.

Sahte kod örnekleri

Ihlal

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: BinaryFormatter.Binder'ı ayarlamadan BinaryFormatter.Deserialize çağrısı yapma

CA2302: BinaryFormatter.Deserialize çağrılmadan önce BinaryFormatter.Binder'ın ayarlandığından emin olun