Deserialization Vulnerabilities Nedir
Güvenilen Nesnelerle Gelen Kontrol Kaybı
“Güvendiğin veri konuşmaya başladığında, kontrol çoktan el değiştirmiştir.”
— Ersan Karavelioğlu
Deserialization Vulnerabilities Nedir
Deserialization Vulnerabilities, uygulamanın dışarıdan gelen serileştirilmiş (serialized) veriyi
doğrulamadan nesneye dönüştürmesi sonucu ortaya çıkan kritik güvenlik açıklarıdır.

Veri tekrar nesne olurken

Yetki ve davranış da geri gelir.
Serialization / Deserialization Ne Demektir
Serialization → Nesneyi veri formatına çevirme
Deserialization → Veriyi tekrar nesneye dönüştürme

Sorun dönüşümde değil,
kime güvendiğindedir.
Neden Bu Kadar Tehlikelidir

Çünkü nesneler
davranış taşır.

Metotlar, constructor’lar, magic function’lar çalışabilir.

Saldırı veriyle değil,
davranışla gelir.
Güven Yanılgısı Nerede Başlar

“Bu veri daha önce bizim ürettiğimiz veri.”

Ama artık
istemciden geliyor.

Güven zinciri burada kopar.
Hangi Dillerde Görülür

PHP (unserialize)

Java (ObjectInputStream)

.NET (BinaryFormatter)

Nesne destekleyen her dil risk altındadır.
Nesne Enjeksiyonu Nedir

Saldırgan özel hazırlanmış nesne gönderir

Deserialization sırasında çalışır

Kod yazmadan kod çalıştırılır
Magic Method Tehlikesi

__wakeup, __destruct, __toString

Otomatik çağrılırlar

Kontrol edilmezse istismar edilirler
POP Chain Nedir

Property-Oriented Programming Chain

Zararsız sınıflar zincirlenir

Sonunda tehlikeli davranış tetiklenir
Deserialization ile Neler Yapılabilir

Dosya silme / okuma

SSRF

RCE (Remote Code Execution)

Etki alanı çok geniştir
Blind Deserialization Saldırıları

Çıktı görünmez

Ama etki oluşur

Loglar ve yan etkiler tek ipucudur

Session ve Cookie Riskleri

Session verileri serialize ediliyorsa

Manipülasyon mümkündür

Kimlik doğrulama bile aşılabilir

JSON Güvenli midir

Daha güvenlidir ama masum değildir

Tip dönüşümleri risk doğurabilir

“Format” tek başına çözüm değildir

WAF Bu Açığı Engeller mi

Bazı pattern’leri yakalar

Ama özel payload’lar geçer

Asıl çözüm uygulama içindedir

Neden Hâlâ Yaygındır

Legacy kodlar

Framework varsayılanları

Performans ve kolaylık güvenliğin önüne geçer

Güvenli Tasarım Nasıl Olmalı

Deserialization’dan kaçın

Sadece primitive tipler kullan

Nesneler dışarıdan gelmemelidir

Mutlaka Gerekliyse Ne Yapılmalı

Allowlist sınıf doğrulaması

Magic method’ları devre dışı bırakma

İmzalama ve bütünlük kontrolü

Loglama ve Tespit

Beklenmeyen deserialization hataları

Anormal davranış zincirleri

Erken sinyal büyük hasarı önler

En Büyük Yanılgı

“Bu sadece veri.”

Hayır, bu
davranış paketidir.

Nesne masum değildir.

Son Söz
Nesneler Konuşursa Kontrol Kaybolur

Deserialization Vulnerabilities,
veriye verilen kör güvenin sonucudur.

Bir nesne yeniden doğduğunda, geçmişini de getirir.

Güvenli uygulama, nesneleri dışarıdan kabul etmez.
“Nesneyi geri çağırdığında, davranışını da çağırırsın.”
— Ersan Karavelioğlu