CVE-2021-32629

Yüksek

Açıklama

Cranelift, Bytecode Alliance tarafından sürdürülen açık kaynaklı bir kod oluşturucudur. Hedef bağımsız bir ara temsili yürütülebilir makine koduna çevirir. Cranelift x64 backend'inin 0.73 sürümünde, bir Wasm programında potansiyel bir sandbox kaçışına yol açabilecek bir senaryo oluşturan bir hata bulunmaktadır. Bu hata, yeni backend'e 2020-09-08 tarihinde eklenmiş ve ilk kez 2020-09-30 tarihindeki bir sürümde yer almıştır ancak yeni backend, 0.73 sürümünden önce varsayılan değildi. Varsayılan ayarlarla yakın zamanda yayınlanan 0.73 sürümü ve yeni backend'i seçmek için açık bir derleme bayrağı kullanan önceki sürümler savunmasızdır. Söz konusu hata, belirli koşullar altında yığından yüklenen bir değer üzerinde sıfır genişletme (zero-extend) yerine işaret genişletme (sign-extend) işlemi gerçekleştirir. Bu koşullar gerçekleşirse, hata, Wasm program heap başlangıcından öncesindeki 2GiB'a kadar olan bellek adreslerine erişime izin verebilir. Eğer heap sınırı 2GiB'dan büyükse, heap sınırının boyutuna bağlı olarak hesaplanabilir bir aralıktaki belleği okumak mümkün olacaktır. Bu hatanın etkisi büyük ölçüde heap uygulamasına bağlıdır, özellikle: * eğer heap sınır kontrollerine sahipse, ve * yalnızca koruma sayfalarına (guard pages) güvenmiyorsa, ve * heap sınırı 2GiB veya daha küçükse * o zaman bu hata başka bir Wasm program heap'inden belleğe ulaşmak için kullanılamaz. Bu hata kullanılarak erişilebilen aralıkta eşlenmiş herhangi bir bellek yoksa, örneğin Wasm program heap'inden önce 2 GiB'lık bir koruma bölgesi varsa, zafiyetin etkisi hafifler. Söz konusu hata, register allocator 64 bitten daha dar, dökülmüş (spilled) bir tam sayı değerini yeniden yüklediğinde, yığından yüklenen değer üzerinde sıfır genişletme yerine işaret genişletme yapar. Bu durum başka bir optimizasyonla kötü etkileşime girer: talimat seçici, 32 bitlik bir değer üreten bir talimatın hedef kaydedicisinin üst 32 bitini aslında sıfırladığını bildiğimizde, 32-den-64 bite sıfır genişletme operatörünü eler. Dolayısıyla, bu sıfırlanmış bitlere güveniriz ancak değerin türü hala i32'dir ve dökme/yeniden yükleme işlemi bu bitleri i32'nin MSB'sinin işaret genişletmesi olarak yeniden oluşturur. Sorun şu durumlarda ortaya çıkar: * Bir Wasm programındaki i32 değeri 0x8000_0000'den büyük veya ona eşit olduğunda; * Değer, tanımı ile kullanımı arasında programdaki yüksek kaydedici baskısı nedeniyle register allocator tarafından dökülüp yeniden yüklendiğinde; * Değer, hedefinin üst 32 bitini sıfırladığı bilinen "özel" bir talimat (add, sub, mul, and, or) tarafından üretildiğinde; * Değer daha sonra Wasm programında 64 bite sıfır genişletildiğinde; * Ortaya çıkan 64 bitlik değer kullanıldığında. Bu koşullar altında, i32 değeri bir pointer olduğunda potansiyel bir sandbox kaçışı söz konusudur. Heap erişimleri için yaygın olarak oluşturulan kod, Wasm heap adresini sıfır genişletir, bunu 64 bitlik bir heap tabanına ekler ve sonuç adrese erişir. Sıfır genişletme işlemine işaret genişletme dönüşürse, program geriye doğru gidebilir ve heap başlangıcından önceki 2GiB'a kadar olan belleğe erişebilir. Cranelift'teki kod oluşturma hatasının doğasını değerlendirmenin yanı sıra, belirli koşullar altında, bu Cranelift sürümünü kullanan hem Lucet hem de Wasmtime'ın istismar edilebilir olabileceğini belirledik. Daha fazla ayrıntı için ilgili GitHub Advisory'ye bakınız.

ÖnemYüksek
CVSS7.2
İstismar olasılığı—
ÜrünWasmtime
Yayın24 May 2021
İlk görülme24 May 2021
Zayıflık türüCWE-788CWE-788

Nasıl düzeltilir

Güncelleyin
  • wasmtime0.27.0 ya da sonraki bir sürüm
  • bytecodealliance cranelift-codegen0.73.1 ya da sonraki bir sürüm
  • cranelift-codegen0.73.1 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
wasmtimePyPIv < 0.27.00.27.0
bytecodealliance cranelift-codegenv < 0.73.10.73.1
cranelift-codegencrates.iov < 0.73.10.73.1

Sürümünüzü kontrol edin

Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.

Intelligence 360 paketinde

Attack Surface Management

Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.