CVE-2021-32629

Yüksək

Təsvir

Cranelift, Bytecode Alliance tərəfindən idarə olunan açıq mənbəli kod generatorudur. O, hədəfdən asılı olmayan ara representationsı icra edilə bilən maşın koduna çevirir. Cranelift x64 backend-inin 0.73 versiyasında Wasm proqramında potensial sandbox-dan çıxışla nəticələnə biləcək ssenari yarada bilən bir xəta mövcuddur. Bu xəta yeni backend-ə 2020-09-08 tarixində əlavə edilmiş və ilk dəfə 2020-09-30 tarixinə olan buraxılışa daxil edilmişdir, lakin 0.73 versiyasına qədər yeni backend standart seçim olmayıb. Standart parametrlərlə təqdim olunan sonuncu 0.73 versiyası və yeni backend-i seçmək üçün açıq build bayrağı istifadə edilmiş əvvəlki versiyalar həssasdır. Sözügedən xəta müəyyən şərtlər altında stekdən yüklənən dəyər üzərində sıfır genişləndirməsi (zero-extend) əvəzinə işarə genişləndirməsi (sign-extend) yerinə yetirir. Əgər bu şərtlər baş verərsə, xəta Wasm proqramının heap-inin başlanğıcından əvvəlki 2GiB-ə qədər yaddaş ünvanlarına girişi mümkün edə bilər. Əgər heap sərhədi 2GiB-dən böyükdürsə, heap sərhədinin ölçüsündən asılı olan hesablanmış diapazondan yaddaşı oxumaq mümkün olar. Bu xətanın təsiri heap implementasiyasından çox asılıdır, xüsusilə: * əgər heap-də sərhəd yoxlamaları varsa, və * eksklüziv olaraq guard page-lərə əsaslanmırsa, və * heap sərhədi 2GiB və ya daha kiçikdirsə * onda bu xətadan digər Wasm proqramının heap-indən yaddaşa çatmaq üçün istifadə etmək olmaz. Əgər bu xəta vasitəsilə əlçatan olan diapazonda heç bir yaddaş xəritələnməyibsə, məsələn, Wasm proqramının heap-indən əvvəl 2 GiB-lik guard bölgəsi varsa, zəifliyin təsiri azalır. Sözügedən xəta, register allocator 64 bitdən dar olan spill olunmuş tam ədəd dəyərini yenidən yüklədikdə, stekdən yüklənən dəyər üzərində sıffır genişləndirməsi əvəzinə işarə genişləndirməsi yerinə yetirir. Bu, digər optimallaşma ilə ziddiyyət təşkil edir: instruction selector, 32-bit dəyər istehsal edən təlimatın əslində öz hədəf register-inin yuxarı 32 bitini sıfırladığını bildikdə, 32-dən 64-bitə sıfır genişləndirmə operatorunu silir. Beləliklə, biz bu sıfırlanmış bitlərə güvənirik, lakin dəyərin tipi hələ də i32-dir və spill/reload prosesi həmin bitləri i32-nin MSB-sinin işarə genişləndirməsi kimi bərpa edir. Problem aşağıdakı hallarda baş verir: * Wasm proqramındakı i32 dəyəri 0x8000_0000-dən böyük və ya ona bərabər olduqda; * Dəyərin təyini ilə istifadəsi arasında proqramda yüksək register təzyiqi səbəbindən register allocator tərəfindən dəyər spill olunub yenidən yükləndikdə; * Dəyər, hədəfinin yuxarı 32 bitini sıfırladığı bilinən "xüsusi" təlimatlar (add, sub, mul, and, or) tərəfindən istehsal edildikdə; * Daha sonra dəyər Wasm proqramında 64 bitə sıfır genişləndirildikdə; * Nəticədə alınan 64-bit dəyərdən istifadə edildikdə. Bu şərtlərdə, i32 dəyəri göstərici (pointer) olduqda potensial sandbox-dan çıxış mümkündür. Heap girişləri üçün adətən emit edilən kod Wasm heap ünvanını sıfır genişləndirir, onu 64-bit heap bazasına əlavə edir və nəticə ünvanına müraciət edir. Sıfır genişləndirməsi işarə genişləndirməsinə çevrilərsə, proqram geri gedərək öz heap-inin başlanğıcından əvvəlki 2GiB-ə qədər yaddaşa müraciət edə bilər. Cranelift-də kod generasiya xətasının mahiyyətini qiymətləndirməklə yanaşı, biz həmçinin müəyyən şərtlər altında, Cranelift-in bu versiyasından istifadə edən həm Lucet, həm də Wasmtime-ın istismar edilə biləcəyini müəyyən etmişik. Daha ətraflı məlumat üçün istinad verilmiş GitHub Advisory-yə baxın.

CiddilikYüksək
CVSS7.2
İstismar ehtimalı—
MəhsulWasmtime
Dərc24 may 2021
İlk görülmə24 may 2021
Zəiflik növüCWE-788CWE-788

Necə düzəltmək olar

Yeniləyin
  • wasmtime0.27.0 və ya daha yeni versiya
  • bytecodealliance cranelift-codegen0.73.1 və ya daha yeni versiya
  • cranelift-codegen0.73.1 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
wasmtimePyPIv < 0.27.00.27.0
bytecodealliance cranelift-codegenv < 0.73.10.73.1
cranelift-codegencrates.iov < 0.73.10.73.1

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.

Intelligence 360 paketində

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.

CVE-2021-32629 · Wasmtime · Dark Radar