Güvensiz seri hale getirme nedir?
Güvensiz seri hale getirme (insecure deserialization), bir uygulamanın dışarıdan gelen serileştirilmiş veriyi doğrulamadan nesneye dönüştürmesiyle ortaya çıkan açıktır. Saldırgan veriyi değiştirerek uygulamanın mantığını bozabilir ve bazı durumlarda sunucuda kod çalıştırabilir.
Serileştirme, bir nesneyi saklanabilir veya iletilebilir bir biçime çevirme işlemidir. Tersi işlemde (deserialization) gelen veriye güvenilirse, saldırganın seçtiği sınıflar ve alanlar uygulamanın belleğinde canlanır.
Nasıl çalışır?
Çerezde, oturum verisinde, API gövdesinde ya da önbellekte serileştirilmiş nesne taşınıyorsa saldırgan bu veriyi düzenleyip geri gönderebilir. Dil ve kütüphaneye göre sonuç değişir: yetki yükseltme, mantık atlama, hizmet engelleme veya uzaktan kod çalıştırma görülebilir.
Tehlikenin büyük kısmı “gadget” zincirlerinden gelir. Bunlar uygulamada zaten bulunan sınıfların, nesne yeniden oluşturulurken tetiklenen yöntemlerinin art arda çağrılarak istenmeyen bir işleme dönüşmesidir. Saldırgan yeni kod yüklemek zorunda kalmaz.
Sunucu ve hosting ortamında
Sorun özellikle Java, PHP, Python ve .NET ekosistemlerinde bilinir; PHP’de unserialize() ve Python’da pickle bunun tipik örnekleridir. Bir çerez ya da gizli form alanında base64 kodlu, anlaşılmaz uzun bir değer görüyorsanız o alan serileştirilmiş nesne taşıyor olabilir.
Paylaşımlı hostingte eklentilerin ve eski temaların güvenli olmayan bir biçimde veri serileştirmesi yaygındır. Güncel olmayan bir eklentideki bu tür açık, sitenin tamamının ele geçirilmesine yol açabilir; bu nedenle eklenti güncellemeleri ayrı bir önem taşır.