CA2305: Güvenli olmayan seri durumdan çıkarıcı LosFormatter kullanmayın
Özellik | Değer |
---|---|
Kural Kimliği | CA2305 |
Başlık | Güvenli olmayan seri kaldırıcı LosFormatter 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.Web.UI.LosFormatter 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.Web.UI.LosFormatter .
LosFormatter
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.
Uyarıların ne zaman bastırılması gerekiyor?
LosFormatter
güvenli değildir ve güvenli hale getirilemiyor.
Sahte kod örnekleri
Ihlal
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
LosFormatter formatter = new LosFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As LosFormatter = New LosFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class