Insecure Deserialization
Last updated
Was this helpful?
Last updated
Was this helpful?
Serialization, bir nesnenin bellekteki durumunun (Örneğin Java nesnesi) dosya, veri tabanı ya da ağ üzerinden iletilebilecek veya saklanabilecek bir formata (genellikle JSON, XML, binary vb.) dönüştürülmesidir.
Deserialization ise bu işlemin tersidir, yani bu formatta gelen verinin tekrar orijinal nesne haline getirilmesidir.
Insecure deserialization ise bir uygulamanın dış kaynaklardan gelen serileştirilmiş veriyi doğrulamadan veya güvenlik kontrolleri olmadan işlemesi sonucu oluşan bir güvenlik açığıdır.
Bu durum, saldırganların özel olarak hazırlanmış zararlı veri göndererek uygulamanın beklenmeyen davranışlar sergilemesine, sistemde yetkisiz işlemler yapmasına veya uzaktan kod çalıştırmasına yol açabilir.
Özellikle Java, PHP, Python gibi dillerde bu risk yaygındır.
Genel olarak konuşmak gerekirse, kesinlikle gerekli olmadıkça kullanıcı girdisinin deserializasyonundan kaçınılmalıdır.
Güvenilmeyen kaynaklardan gelen verileri yeniden derlemeniz gerekiyorsa, verilerin kurcalanmadığından emin olmak için sağlam önlemler alın. Örneğin, verilerin bütünlüğünü kontrol etmek için bir dijital imza uygulayabilirsiniz. Bununla birlikte, tüm kontrollerin deserializasyon işlemine başlamadan önce gerçekleştirilmesi gerektiğini unutmayın.
Mümkünse, genel serileştirme özelliklerini kullanmaktan tamamen kaçınmalısınız. Bu yöntemlerle serileştirilen veriler, potansiyel olarak hassas bilgiler içeren özel alanlar da dahil olmak üzere orijinal nesnenin tüm niteliklerini içerir. Bunun yerine, en azından hangi alanların açığa çıkacağını kontrol edebilmek için kendi sınıfa özgü serileştirme yöntemlerinizi oluşturabilirsiniz.
YsoSerial:
Portswigger Academy: