Güvenlik

AutoMapper 16.3.0 ve 15.1.4: MaxDepth açıklarını kapatan güvenlik sürümleri

Jimmy Bogard, AutoMapper'ın 16.3.0 ve 15.1.4 sürümlerini yayınladı; iki sürüm de iki güvenlik açığını kapatıyor. Mart ayında eklenen varsayılan MaxDepth sınırının constructor tabanlı eşlemelerde ve türetilmiş map'lerde tamamen atlanabildiği ortaya çıktı; derin ve kendine referans veren nesne grafikleriyle StackOverflowException üzerinden servis dışı bırakma mümkündü.

Jimmy Bogard Jimmy Bogard
Yayın tarihi
Okuma süresi
2 dk okuma
agent çalıştırması #25
agent çalıştırması #25
Orijinale git jimmybogard.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • 16.3.0 ve 15.1.4, GHSA-6vhm-j9h7-f9gh ve GHSA-gpwp-5797-mjff için güvenlik düzeltmeleri içeriyor
  • Mart'taki 16.1.1 düzeltmesi varsayılan MaxDepth 64 sınırını eklemişti, ancak birkaç eşleme yolu onu atlıyordu
  • Constructor ile oluşturulan hedefler (positional record) MaxDepth'i tamamen yok sayıyordu
  • Türetilmiş map'ler artık MaxDepth'i devralıyor; sınırlanamayan özyineleme InsufficientExecutionStackException fırlatıyor
  • 64 seviyeden derin polimorfik grafiklerde MaxDepth'i açıkça ayarlamak gerekiyor
  • Lisans anahtarları için 30 günlük yenileme toleransı hata yerine uyarı logluyor

Mart ayında 16.1.1 sürümünde, derin ve kendine referans veren nesne grafiklerinin stack'i tüketmesini engellemek için kendine referans veren map'lerde varsayılan MaxDepth değeri 64 olarak belirlenmişti. Ancak birçok eşleme yolunun bu sınırı hiç uygulamadığı görüldü: positional record gibi constructor üzerinden oluşturulan hedeflerde MaxDepth tamamen yok sayılıyordu (GHSA-6vhm-j9h7-f9gh). Include/IncludeBase ile tanımlanan türetilmiş map'ler sınırı devralmıyor, object veya interface olarak tiplenmiş üyeler varsayılan sınırı almıyor, Dictionary<string, object> ve ExpandoObject kaynakları derinlik takibi yapmıyor ve özyinelemeli ConvertUsing da sınırı atlıyordu (GHSA-gpwp-5797-mjff).

Yeni sürümlerde türetilmiş map'ler MaxDepth'i devralıyor, sınırın uygulanamadığı özyineleme ise süreci düşürmek yerine yakalanabilir InsufficientExecutionStackException ile sonlanıyor. Bu bir davranış değişikliği: 64 seviyeden daha derin polimorfik grafikleriniz varsa MaxDepth'i açıkça ayarlamanız gerekiyor. 16.3.0 ayrıca Context.Items hatalarına, lisans doğrulamasına ve ForAllMembers koşullarına ilişkin düzeltmeler içeriyor.

Gerçek dünyada kullanımı

  • Kullanıcıdan gelen JSON'u DTO'ya çevirip AutoMapper ile eşleyen bir public API'de derin nested payload'lara karşı DoS koruması
  • Kendi içinde referans veren ağaç yapılarını (kategori hiyerarşisi, yorum zinciri) eşleyen arka plan işçileri
  • Include/IncludeBase ile polimorfik map'ler kuran ve derinliği kontrol etmek zorunda olan çok kiracılı SaaS servisleri
  • Güvenlik taraması sonrası 15.x üzerinde kalmış eski uygulamalara yama uygulayan bakım ekipleri

Neden önemli

Güvenilmeyen girdiyi bu yollardan eşleyen uygulamalar, yakalanamayan StackOverflowException nedeniyle tüm süreci kaybedebiliyordu; yeni sürümler bu riski yakalanabilir bir exception'a çeviriyor.

Bu özet, Jimmy Bogard üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü