Insecure Deserialization (güvensiz serileştirme), bir uygulamanın, dışarıdan sağlanan verileri serileştirme ve deseralize etme işlemlerinde gerekli güvenlik kontrollerini yapmaması sonucu ortaya çıkan bir güvenlik zafiyetidir. Bu tür zafiyetler, saldırganların zararlı veriler enjekte ederek uygulamanın beklenmeyen şekillerde davranmasına neden olmasına yol açabilir. Bu davranışlar arasında uzaktan kod çalıştırma, veri manipülasyonu veya yetki yükseltme gibi kritik sorunlar yer alabilir.
Deserializasyon: Serileştirilmiş verinin, orijinal veri yapısına veya nesneye dönüştürülmesidir.
Bu veriyi aşağıdaki gibi yorumlayabiliriz.
O:4:"User" – 4 karakterli “User” isimli bir sınıfa ait bir nesne (object)
:2: – Nesneye ait olan iki nitelik olduğu belirtiliyor.
:s:4:"name" – İlk nitelikteki veriye ait key değerinin 4 karakter dizesinin (string) "name" olduğu belirtiliyor.
:s:6:"radox" – İlk nitelikteki veriye ait value değerinin 6 karakter dizesinin (string) "carlos" olduğu belirtiliyor.
:s:10:"isLoggedIn" - İkinci nitelikteki veriye ait key değerinin 10 karakter dizesinin (string) "isLoggedIn" olduğu belirtiliyor.
:b:1 - İkinci nitelikteki veriye ait value değerinin “boolean true” olduğu belirtiliyor.
Örneğin;
Bir uygulamaya başarılı bir şekilde giriş yapıldığında "session" isimli bir cookie atandığını görüyoruz.
Cookie verisi Base64 Encode ve URL Encode edilmiş. Bu veriyi öncelikle URL Decode, sonrasında da Base64 Decode ettiğimizde karşımıza aşağıdaki gibi bir veri çıkıyor.
Bu aşamada saldırgan olarak, "admin" niteliğinin yönetici haklarını temsil ettiğini ve bu niteliği "boolean true" olarak değiştirerek yönetim paneline erişim durumunu test etmeye çalışabiliriz. Cookie içerisindeki veri değiştirilerek aşağıdaki formatta hazırlanabilir.
Gerekli encoding işlemlerini de yaptıktan sonra uygulama içerisinde oturumumuzu temsil eden session cookie değerini aşağıda hazırlamış olduğumuz "admin" session verisi ile değiştirebiliriz.
Session cookie'sini değiştirdiğimizde artık yönetim paneline erişim sağlayıp Admin kullanıcısını silebildiğimizi görüyoruz.
Serileştirme ve Deserializasyon Nedir?
Serileştirme: Bir veri yapısının veya nesnenin, saklanabilir veya iletilebilir bir formata dönüştürülmesidir. Örneğin, bir nesneyi JSON veya XML formatına dönüştürmek. Bu işlem sırasında nesneler “bytestream” yapılarına dönüştürülür. Uygulamalar, genellikle depolama veya iletişimin bir parçası olarak gönderilmek üzere nesneleri seri hale getirir. Verileri seri hale getirilirken, nesnenin nitelikleri ve aldığı değerler kaydedilir. “Spydark/MecTruy adında 30 yaşında bir erkek”, {male|30|SpyDark|MecTruy} gibi bir formata dönüşür.Deserializasyon: Serileştirilmiş verinin, orijinal veri yapısına veya nesneye dönüştürülmesidir.
PHP:
O:4:"User":2:{s:4:"name":s:6:"radox"; s:10:"isLoggedIn":b:1;}
O:4:"User" – 4 karakterli “User” isimli bir sınıfa ait bir nesne (object)
:2: – Nesneye ait olan iki nitelik olduğu belirtiliyor.
:s:4:"name" – İlk nitelikteki veriye ait key değerinin 4 karakter dizesinin (string) "name" olduğu belirtiliyor.
:s:6:"radox" – İlk nitelikteki veriye ait value değerinin 6 karakter dizesinin (string) "carlos" olduğu belirtiliyor.
:s:10:"isLoggedIn" - İkinci nitelikteki veriye ait key değerinin 10 karakter dizesinin (string) "isLoggedIn" olduğu belirtiliyor.
:b:1 - İkinci nitelikteki veriye ait value değerinin “boolean true” olduğu belirtiliyor.
Örneğin;
Bir uygulamaya başarılı bir şekilde giriş yapıldığında "session" isimli bir cookie atandığını görüyoruz.
| Set-Cookie: session=Tzo00iVc2VyIjoyOntz3Da6InVzZXJuYW1lIjtzOjY6IndpZW5lci17czo10iJhZG1pbi17Yjow030% |
| O:4:"User":2:{s:4:"name":s:6:"radox"; s:10:"isLoggedIn":b:1;} |
| 0:4:"User":2:{s:8:"username";s:6:"radox";s:5:"admin";b:1;} |
| Tzo00iJVc2VyIjoyOntzOjg6InVzZ3eXJuYW1lIjtzOjY6IndpZW5lci17czo10iJhZG1pbi17Yjox030%3d |
Korunma Yöntemleri
Deserializasyon işlemi öncesinde verinin güvenli olup olmadığını doğrulayın.
JSON gibi daha güvenli serileştirme formatlarını kullanın.
Uygulamanızın serileştirme ve deseralize etme işlemlerini dikkatlice inceleyin veya bir uzmana danışın.
Güvenlik kontrolleri olan kütüphaneleri tercih edebilirsiniz.
Sadece belirli tipteki nesnelerin serileştirilmesine ve deseralize edilmesine izin verebilirsiniz.
Bu içeriği görmek için giriş yapın.
Son düzenleme: