Kritinis „Wasmtime“ pažeidžiamumas, „WebAssembly“ programų vykdymo laikas

Korekciniai atnaujinimai Wasmtime 6.0.1, 5.0.1 ir 4.0.1 ištaisė pažeidžiamumą (CVE-2023-26489), kuriam buvo priskirtas kritinis pavojaus lygis. Dėl pažeidžiamumo duomenis galima įrašyti į atminties sritį, esančią už izoliuoto „WebAssembly“ kodo ribų, kurią užpuolikas gali panaudoti savo kodui vykdyti už izoliuotos WASI aplinkos ribų.

Wasmtime yra vykdymo laikas, skirtas paleisti WebAssembly programas su WASI (WebAssembly System Interface) plėtiniais kaip įprastomis atskiromis programomis. Įrankių rinkinys parašytas Rust kalba, o pažeidžiamumą sukelia loginė klaida apibrėžiant tiesinės atminties adresavimo taisykles Cranelift kodo generatoriuje, kuris tarpinį vaizdą, nepriklausomą nuo aparatinės įrangos architektūros, paverčia vykdomuoju mašinos kodu x86_64 architektūrai.

Visų pirma „WebAssembly“ programoms buvo apskaičiuoti 35 bitų efektyvūs adresai, o ne „WebAssembly“ leidžiami 33 bitų adresai, todėl skaitymo ir rašymo operacijoms leidžiamos virtualios atminties riba buvo perkelta iki 34 GB, o smėlio dėžės aplinkos parametrai užtikrina apsaugą 6 GB nuo bazinio adreso. Dėl to virtualioji atmintis nuo 6 iki 34 GB nuo bazinio adreso buvo prieinama skaitymui ir rašymui iš „WebAssembly“ programų. Ši atmintis gali talpinti kitas WebAssembly aplinkas arba WebAssembly vykdymo laiko komponentus.

Jei neįmanoma atnaujinti Wasmtime versijos, klaidos blokavimo būdas yra nurodyti parinktį „Config::static_memory_maximum_size(0)“, kad būtų įjungtas atskiras visų tiesinės atminties prieigos apribojimų patikrinimas (dėl to našumas bus reikšmingas). . Kita galimybė yra naudoti nustatymą „Config::static_memory_guard_size(1 < 36)“, kad padidintumėte apsauginių puslapių skaičių (išimtis, kai jie pasiekiami), patalpintų probleminėje virtualiosios atminties diapazone (dėl to rezervuojamas didelis kiekis virtualios atminties ir apriboti vienu metu veikiančių „WebAssembly“ programų skaičių).

Šaltinis: opennet.ru

Добавить комментарий