Selamlar herkese, sizlere web aplikasyonlarında oluşabilecek kritik bir zafiyet olan insecure deserialization'dan bahsedeceğim. Nasıl çalıştığını anlatmadan önce ne olduğu ile başlayalım. Insecure deserialization zafiyeti, bir web aplikasyonunda bulunan herhangi bir objenin manipüle edilip varolan context'lere enjekte edilmesi ile gerçekleştirilen bir saldırı çeşitidir. Bu web aplikasyonunda manipüle edilmiş objenin serileştirilip çalıştırılması durumunda SQL injection, DoS (Denial of Service), RCI (Remote Code Execution) gibi kötü sonuçlar oluşabilmektedir. Ek olarak bu zafiyet OWASP 10 zafiyetleri listesinde uzun bir süre yer almıştır.





Yukarıda da gördünüz bu serialization / deserialization mevzusundan bahsedeyim sizlere. Bir object yani nesnenin saklanacak veya gönderileceği türe dönüştürülmesine serialization denir. Deserialization'u da bu işlemin ters hali diye düşünebilirsiniz. Genellikle bu veriler xml, json, yaml gibi türlere dönüştürülür serialization işlemlerinde. Aslında bu işlemler çok masum ve sorun çıkarmayacak gibi gözükse de içinde bir şeytan yattığını bu konu ile görmüş olacağız.

Örnek olarak bu zafiyetten faydalanarak aşağıda bulunan python komutunu girdiğimizde bulunduğumuz dizindeki dosyaları görebiliriz. Tabiki bu bir RCI oluyor.
Kod:
!!python/object/apply.os.system
args:['ls']
Konuyu görselleştirilmiş bir şekilde daha da iyi anlayabilmek açısından portswigger'deki abilerin paylaşmış olduğu görseli inceleyebilirsiniz;



Nasıl tespit edeceğiz bunu bana onu söyle kardeşim dediğinizi düşünüyorum. Hemen onu da anlatayım sizlere.
  • Deserialization işlemlerinin kontrollerini gerçekleştirerek
  • Monitoring programları aracılığıyla bu işlemleri inceleyerek
  • En önemlisi ise belirli periyodlarla olması gerektiği gibi güvenlik testleri gerçekleştirerek
Zafiyeti en basit düzeyde anladığımızı var sayıyorum. Peki kardeşim biz bu zafiyetin oluşmasını nasıl önleyebiliriz? Maddelere ayırmak gerekirse aşağıdaki gibidir;
  • Güvenilmeyen kaynaklardan herhangi bir serialized objeleri kabul etmeyerek
  • Güvenlik sorunları oluşturmaması açısından bu objelerin, nesnelerin checksum (dijital imza) değerlerini kontrol ederek
  • Verilen kod parçacığı yani script'i fazla yetkisi(privilege) bulunmayan ortamlarda izole edip çalıştırarak
  • Yukarıda bulunan maddeyi baz alarak herhangi bir privilege esclation durumunun yaşanmaması için kullanılan servislerin sürümlerini kontrol ederek
  • Gerçekleştirilen işlemlerin log kayıtlarını tutarak
  • Network monitoring işlemlerinin yanında kısıtlamalar getirerek
  • Tabiki firewall kullanarak
Senaryo Örneği

Bir forumumuz olduğunu düşünelim. İstihbarat ekibi benden şüphelenecek mi acep? Bu forumda kullanıcı bilgilerini tutabilmek ve cookie olarak kaydedebilmek için php object serialization gerçekleştirildiğini farz edelim. Bu cookie'ler aşağıdaki gibi değiştirildiği taktirde saldırgan arkadaş admin yetkilerine sahip olabilmektedir.

Öncesi
Kod:
a:4:{i:0;i:132;i:1;s:7:"x4807";i:2;s:4:"user";
i:3;s:32:"p9a0b3bea89ke0n05622f1f3c68ac460";}
Sonrası
Kod:
a:4:{i:0;i:1;i:1;s:5:"Arsenik";i:2;s:5:"admin";i
:3;s:32:"p9a0b3bea89ke0n05622f1f3c68ac460";}

Örnek amaçlıdır inşallah alınmaz kendisi .) Ek olarak cookie gerçek değil boşuna denemeyin.

Örnek bir senaryo verdiğimize göre sıra geçmişe dönmekte.2017 yılında gerçekleştirilen Equifax saldırısı... Milyonlarca kişinin kişisel verisi bu saldırı ile sızdırılmıştı. Saldırının Apache'de bulunan Struts zafiyeti nedeniyle olduğu düşünülmekte. Bu zafiyetin de insecure deserialization tabanlı olduğu görülmüştür. CVE-2017-5638

Birkaç HackerOne Insecure Desiralization Rapor Örneği


Aşağıda bulunan h1 raporlarını incelemeniz de konuyu anlamanız açısından önem taşımaktadır.

1) https://hackerone.com/reports/350401
2) https://hackerone.com/reports/838196
3) https://hackerone.com/reports/350418
4) https://hackerone.com/reports/562335

Son olarak ek bilgiler vermem gerekir ise şunları söyleyebilirim;
  1. OWASP 10 listesinde bulunan expliotibility puanlaması 1 olan tek zafiyettir yani en zorudur.
  2. Saldırganlar için tespiti zordur
  3. İleri seviye bir zafiyettir
İlgi ve alakanız için teşekkürler, iyi forumlar dilerim