Konuyu Okuyanlar: 1 Ziyaretçi

Güvenli Olmayan Deserialization: pickle, YAML ve Java için OWASP Özeti

Güvenli Olmayan Deserialization: pickle, YAML ve Java için OWASP Özeti
[Resim: attachment.php?aid=360]

Selamlar,

CISA'nın SafePay uyarısında Veeam Backup & Replication için adı geçen CVE-2024-40711, CWE-502: Deserialization of Untrusted Data sınıfında. Yani sorun yeni değil; fidye grupları hâlâ bu sınıftan besleniyor. Bu yazıda OWASP Deserialization Cheat Sheet'in pratik kısımlarını Python, Java ve genel prensipler üzerinden özetliyorum.

Konuda anlatılacaklar
  1. Serialization / deserialization nedir?
  2. Python: pickle ve YAML
  3. Java: ObjectInputStream ve filtreler
  4. Genel kural: güvenilmeyen veriyi native formatta açmayın

Kısa tanım
Serialization bir nesneyi saklanabilir / gönderilebilir bir formata çevirmektir; deserialization tersidir. JSON ve XML gibi saf veri formatları görece güvenlidir. Birçok dilin yerel (native) formatı ise özelleştirme özellikleri sunar; bu özellikler güvenilmeyen veride RCE, DoS veya erişim kontrolü atlatmaya dönüşebilir.

Python
OWASP'ın net uyarısı:
  • pickle.load / pickle.loads: Güvenilmeyen veriyi asla unpickle etmeyin; keyfi kod çalıştırabilir.
  • PyYAML: Güvenilmeyen YAML için yaml.safe_load() kullanın; yaml.unsafe_load veya Loader=yaml.Loader / UnsafeLoader kullanmayın.
  • jsonpickle.decode: Güvenilmeyen girdiyle kullanmayın.

Kod:
# Kendi labiniz - guvenli YAML import yaml metin = "liste: [1, 2, 3]" veri = yaml.safe_load(metin) print(veri) # pickle: yalnizca tamamen guvendiginiz, sizin urettiginiz baytlar

Java
  • ObjectInputStream.readObject / readUnshared, XStream.fromXML, XMLDecoder gibi API'leri güvenilmeyen girdiyle kullanmayın.
  • Serialization filter'ları uygulama özel sınıf allow-list'i ve kaynak limitleriyle yapılandırın.
  • resolveClass() override'ı tek başına yeterli değildir; grafik derinliği, referans sayısı, dizi uzunluğu ve akış boyutu da sınırlanmalıdır.
  • Hex'te AC ED 00 05 veya Base64'te rO0 ile başlayan trafik Java serialization işareti olabilir.

Genel prensipler
  1. Mümkünse native format yerine JSON/XML gibi saf veri formatı kullanın.
  2. Akışın nesne tipini belirlemesine izin vermeyin.
  3. İmzalı (imzası doğrulanmış) veriyi deserialize edin.
  4. Hassas alanları transient yapın; asla deserialize edilmemesi gereken sınıflarda readObject her zaman istisna fırlatsın.

SafePay bağlamında ders basit: yedekleme ürünlerindeki yıllardır bilinen deserialization RCE'leri hâlâ aktif sömürü vektörü. Envanterinizde Veeam, eski Java serileştirme uçları ve pickle kullanan dahili API'ler varsa bunları "teknik borç" değil "açık kapı" olarak işaretleyin.

Kod tabanınızda pickle veya yaml.load (safe olmayan) kalan yer var mı? Grep sonucunuzu (dosya yolu yeter) paylaşın.

Yasal uyarı
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.

Kaynaklar


Ek DosyalarEkran Görüntüleri
   
Cevapla



Hızlı Menü: