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