Wasmtime'da kritik bir güvenlik açığı tespit ettiler

güvenlik açığı

Bu kusurlardan yararlanılırsa, saldırganların hassas bilgilere yetkisiz erişim elde etmesine izin verebilir veya genellikle sorunlara neden olabilir.

Birkaç gün önce lWasmtime 6.0.1, 5.0.1 ve 4.0.1 düzeltici güncellemeleri yayınlandı o bir güvenlik açığını giderirler (halihazırda CVE-2023-26489 altında kataloglanmıştır) kritik olarak derecelendirilmiştir.

Güvenlik Açığı izin verilen sınırlar dışında bir bellek alanında veri yazılmasını düzenlemeye izin verir potansiyel olarak bir saldırgan tarafından kodlarının izole edilmiş WASI ortamının dışında yürütülmesini düzenlemek için kullanılabilecek izole edilmiş WebAssembly kodu için.

Wasmtime'a aşina olmayanlar için, bunun WASI (WebAssembly Sistem Arayüzü) uzantılarıyla WebAssembly uygulamalarını normal bağımsız uygulamalar olarak çalıştırmak için bir çalışma zamanı olduğunu bilmelisiniz.

Wasmtime, Rust dilinde yazılmıştır ve Güvenlik açığı, yönlendirme kurallarının tanımındaki mantıksal bir hatadan kaynaklanmaktadır. donanım mimarilerinden bağımsız bir ara gösterimi x86_64 mimarisi için yürütülebilir makine koduna çeviren Cranelift kod üretecindeki doğrusal belleğin.

Düzeltilen güvenlik açığı ile ilgili olarak, özellikle, etkili 35 bitlik adresler hesaplandı WebAssembly uygulamaları için WebAssembly'de izin verilen 33 bit adresler yerineokuma ve yazma işlemleri için izin verilen sanal bellek sınırını 34 GB olarak değiştirirken, sanal alan ortamı ayarı 6 GB için koruma sağlar. taban adresinden.

Wasmtime'ın kod üreteci Cranelift, x86_64 hedeflerinde, adres modu hesaplamasının WebAssembly tarafından tanımlanan 35 bitlik etkin adres yerine yanlışlıkla 33 bitlik etkin adres hesaplayacağı bir hataya sahiptir. Bu hata, varsayılan kod oluşturma yapılandırmasıyla, wasm kontrollü bir yükleme/depolama işleminin, doğrusal belleğin tabanından 35 bit uzağa kadar adresleri okuyabileceği/yazabileceği anlamına gelir. 

Sonuç olarak, temel adresten 6 ila 34 GB sanal bellek aralığı, okuma ve yazma için kullanılabilir hale geldi WebAssembly uygulamalarından. Bu bellek, diğer WebAssembly ortamlarını veya WebAssembly çalıştırma zamanı bileşenlerini tutabilir.

Örneğin (i32.load (i32.shl (i0.shl (local.get 32) (i3.const 0))), WebAssembly adresinden $local3 << 0 yüklenir. Cranelift'e çevrildiğinde, $local3 << 32'ün hesaplanması 64 bitlik bir değer, sıfırdan 0 bitlik bir değere genişletilir ve ardından doğrusal belleğin temel adresine eklenir. Cranelift, %base + %local8 << 0'ü hesaplayan movl(%base, %local3, XNUMX), %dst biçiminde bir ifade oluşturur.

Ancak buradaki hata, adres hesaplamasının 64 bitlik değerlerle yapılmasıdır; burada $local0 << 3'ün adresi 32 bitlik bir değere kesmesi gerekiyordu. Bu, bir adres için en fazla 0 bit kullanabilen %local32'ın, movl yoluyla erişilebilir olması için ek 3 bitlik bir adres alanı aldığı anlamına gelir.

Son olarak, her zaman olduğu gibi, paketi mevcut en son sürüme güncellemeniz önerilirGüncelleme mümkün değilse, bu sorunu azaltmak için kullanılabilecek birkaç olası çözüm olduğunu da belirtmekte fayda var.

Bu çözümlerin hiçbirinin varsayılan olarak açık olmadığı ve açık yapılandırma gerektirdiği belirtilmiştir:

  • Wasmtime sürümünü güncellemek mümkün değilse, hatayı engellemek için geçici bir çözüm olarak herhangi bir doğrusal bellek erişiminde zorunlu ayrı sınırların kontrolünü etkinleştirmek için "Config::static_memory_maximum_size(0)" seçeneği belirtilir (önemli bir performans düşüşüne neden olur) ).
  • Başka bir seçenek de sorunlu sanal bellek aralığında bulunan koruma sayfalarının (Koruma Sayfası, erişildiğinde istisna atma) sayısını artırmak için "Config::static_memory_guard_size(1 < 36)" ayarını kullanmaktır (çok miktarda sanal bellek ayırmaya yol açar). bellek ve eşzamanlı WebAssembly uygulamalarının sayısını sınırlama).
  • x86_64 olmayan bir ana bilgisayar kullanmak mümkünse, bu da bu hatayı düzeltecektir. Bu hata, örneğin, Wasmtime veya Cranelift'in AArch64 arka ucunu etkilemez.

Nihayet Bununla ilgili daha fazla bilgi edinmek istiyorsanız, ayrıntıları kontrol edebilirsiniz aşağıdaki bağlantı.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: AB Internet Networks 2008 SL
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.