CVE-2023-30624
Təsvir
Wasmtime, WebAssembly üçün müstəqil bir runtime-dır. Versiyalar 6.0.2, 7.0.1 və 8.0.1-dən əvvəlki Wasmtime-ın cədvəllər və yaddaşlar kimi hər instansiya üçün olan vəziyyətin idarə edilməsi tətbiqi LLVM səviyyəsində təyin olunmamış davranışa (undefined behavior) malikdir. Bu təyin olunmamış davranışın LLVM 16 ilə kompilyasiya edildikdə runtime səviyyəsində problemlərə səbəb olduğu və düzgünlük üçün kritik olan bəzi yazma əməliyyatlarının optimallaşdırma zamanı silindiyi aşkar edilmişdir. Beta mərhələsində olan Rust 1.70 və ya daha yeni versiyaları ilə kompilyasiya edilmiş Wasmtime-ın zəiflikləri olan versiyalarının yanlış kompilyasiya edilmiş funksiyalara malik olduğu məlumdur. Cari stabil Rust versiyası olan 1.69 və daha əvvəlki versiyalarla kompilyasiya edilmiş Wasmtime versiyalarında hazırda heç bir problemin olmadığı məlumdur, lakin nəzəri olaraq potensial problemlər ortaya çıxa bilər. Əsas problem ondan ibarətdir ki, Wasmtime-ın bir instansiya üçün runtime vəziyyəti, özündən sonra gələn `VMContext` strukturuna malik olan və Rust-da təyin edilmiş `Instance` adlı strukturu əhatə edir. Bu `VMContext` strukturunun hər modul üçün unikal olan və runtime tərəfindən təyin edilmiş layout-u var. Bu təmsil Rust-da təhlükəsiz kodla ifadə edilə bilmir, buna görə də bu vəziyyəti saxlamaq üçün `unsafe` kod tələb olunur. Lakin bunu edən kodda arqument kimi `&self` qəbul edən, lakin allokasiyanın `VMContext` hissəsindəki məlumatları dəyişdirən metodlar mövcuddur. Bu o deməkdir ki, `&self`-dən törəmiş göstəricilər (pointers) mutasiyaya uğrayır. Rust-da bu, adətən yalnız `UnsafeCell` olduqda icazə verilir. LLVM-ə kompilyasiya edildikdə, bu funksiyaların `noalias readonly` parametrləri olur, bu isə göstəricilər vasitəsilə yazıların aparılmasının UB (təyin olunmamış davranış) olması deməkdir. Wasmtime-ın daxili təmsili və `VMContext`-in idarə edilməsi, müvafiq yerlərdə `&mut self` metodlarından istifadə etmək üçün yenilənmişdir. Əlavə olaraq, gələcək kompilyator versiyalarında istismar edilə biləcək hər hansı Rust səviyyəli problemi həll etmək üçün yaxın zamanda `main` budaqda `cargo miri` kimi Rust-dakı `unsafe` kod üçün yoxlama alətlərinin işlədilməsi planlaşdırılır. GitHub buraxılışlarında Wasmtime üçün mövcud olan öncədən kompilyasiya edilmiş binary faylları maksimum LLVM 15 ilə kompilyasiya edilib, buna görə də onların zəifliyə malik olduğu məlum deyil. Bununla belə, yuxarıda qeyd edildiyi kimi, yeniləmə tövsiyə olunur. LLVM 16-da düzgün işləmək üçün zəruri olan yamanı ehtiva edən və LLVM 15 və daha əvvəlki versiyalarda məlum UB-si olmayan Wasmtime 6.0.2, 7.0.1 və 8.0.1 versiyaları buraxılmışdır. Əgər Wasmtime LLVM 15-dən istifadə edən Rust 1.69 və daha əvvəlki versiyalarla kompilyasiya edilibsə, məlum problemlər yoxdur. Lakin təyin olunmamış davranışın istismar edilməsinin nəzəri ehtimalı olduğu üçün istifadəçilərə Wasmtime-ın yamalanmış versiyasına keçid etmeleri tövsiyə olunur. Beta Rust (hazırda 1.70) və ya nightly Rust (hazırda 1.71) istifadə edən istifadəçilər düzgün işləməsi üçün mütləq yamalanmış versiyaya yenilənməlidir.
Necə düzəltmək olar
- bytecodealliance wasmtime6.0.2 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| bytecodealliance wasmtime | v < 6.0.2, 7.0.0, 8.0.0 | 6.0.2 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.