Insecure Deserialization
Insecure Deserialization
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.

Saldırı Yöntemleri
Veri Değerlerini Değiştirme
Veri Tipini Değiştirme
Dosya Okuma
Object Injection
Java Deserialization
YsoSerial: https://github.com/frohoff/ysoserial
PHP Deserialization
Ruby Deserialization
Önlemler
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.
Kaynaklar
Last updated