CVE-2021-39218
Açıklama
Wasmtime, WebAssembly ve WASI için açık kaynaklı bir çalışma zamanıdır. Wasmtime'ın 0.26.0 sürümünden başlayarak 0.30.0 sürümü öncesine kadar olan versiyonları, bir bellek güvensizliği (memory unsoundness) zafiyetinden etkilenmektedir. Wasmtime'da `externref` kullanan Wasm çalıştırıldığında geçersiz serbest bırakma (invalid free) ile sınır dışı okuma ve yazma hatası meydana gelmekteydi. Bu hatayı tetiklemek için; Wasmtime'ın `externref` kullanan bir Wasm çalıştırması, ana makinenin (host) null olmayan `externref`ler oluşturması, Wasmtime'ın bir çöp toplama (garbage collection - GC) işlemi gerçekleştirmesi, yığında (stack) hiçbir canlı referansın bulunmadığı bir GC güvenli noktasındaki (safepoint) bir Wasm çerçevesinin olması ve bu çerçevenin fonksiyonunda daha önce canlı referansların bulunduğu bir güvenli noktanın yer alması gerekmektedir. Bu senaryoda Wasmtime, boş güvenli nokta yerine fonksiyonun başındaki güvenli noktaya ait GC yığın haritasını yanlışlıkla kullanmaktadır. Bu durum, Wasmtime'ın rastgele yığın yuvalarını GC için köklendirilmesi gereken `externref`ler olarak değerlendirmesine yol açar. Bir *sonraki* GC işleminde, bu sahte `externref`lere hiçbir şeyin referans vermediği belirlenir (çünkü gerçekte `externref` olmadıkları için hiçbir şey onlara referans veremez) ve ardından Wasmtime bunları bellekten tahliye ederek üzerlerinde `<ExternRef as Drop>::drop` işlemini çalıştırır. Bu durum, mutlaka yığında (heap) olmayabilecek (ve yığında olsa bile o anda serbest bırakılmaması gereken) belleğin serbest bırakılmasına, ayrıca potansiyel sınır dışı okuma ve yazmalara neden olur. `externref` desteği (referans türleri önerisi aracılığıyla) varsayılan olarak etkin olsa da, ana makine kodunuzda null olmayan `externref`ler oluşturmadığınız veya açıkça GC tetiklemediğiniz sürece bu hatadan etkilenmezsiniz. `externref` kullanımı şu an oldukça nadir olduğu için bu hatanın etkili etkisinin nispeten küçük olduğuna inanmaktayız. Bu hata düzeltilmiştir ve kullanıcılar Wasmtime 0.30.0 sürümüne yükseltme yapmalıdır. Şu anda Wasmtime'ı yükseltemiyorsanız, `wasmtime::Config::wasm_reference_types` parametresine `false` değerini geçirerek referans türleri önerisini devre dışı bırakıp bu hatadan kaçınabilirsiniz.
Nasıl düzeltilir
- bytecodealliance wasmtime0.30.0 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| bytecodealliance wasmtime | 0.26.0 ≤ v < 0.30.0 | 0.30.0 |
| fedoraproject fedora | 34, 35 | — |
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.
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.