Në versionet corrective Wasmtime 6.0.1, 5.0.1 dhe 4.0.1 është eliminuar një vulnerabilitet (CVE-2023-26489) i caktuar me nivel kritik rreziku. Vulnerabiliteti lejon regjistrimin e të dhënave në një zonë memorie jashtë kufijve të pranuar për kodin e izoluar WebAssembly, çka mund të përdoret nga një sulmues për të ekzekutuar kodin e tij jashtë mjedisit të izoluar WASI.
Wasmtime është një runtime për ekzekutimin e aplikacioneve WebAssembly me zgjerime WASI (WebAssembly System Interface) si aplikacione të ndara zakonisht. Instrumenti është shkruar në gjuhën Rust, dhe vulnerabiliteti është shkaktuar nga një gabim logjik në përcaktimin e rregullave të adresimit linear të memories në gjeneruesin e kodit Cranelift, i cili transketon një përfaqësim të ndarë nga arkitekturat harduerike në kodin e makinerisë së ekzekutueshëm për arkitekturën x86_64.
Në veçanti, për aplikacionet WebAssembly janë llogaritur adresa efikase 35-bitësh në vend të atyre 33-bitësh të lejuara në WebAssembly, duke lëvizur kufirin e lejuar për operacionet e leximit dhe shkruajtjes së memories virtuale deri në 34 GB, ndërsa konfigurimet e mjedisit sandbox ofrojnë mbrojtje deri në 6 GB nga adresa bazë. Si rezultat, diapazoni i memories virtuale nga 6 deri në 34 GB nga adresa bazë ishte i disponueshëm për lexim dhe shkruar nga aplikacionet WebAssembly. Në këtë memorje mund të vendosen mjedise të tjera WebAssembly ose komponentë të runtime-it të WebAssembly.
Në rast se nuk është e mundur të përditësohet versioni i Wasmtime, si mënyra e mbështetjes për të bllokuar gabimin theksohet caktimi i opsionit "Config::static_memory_maximum_size(0)" për të aktivizuar një kontroll të obligueshëm të kufijve për çdo qasje në memorjen lineare (shkakton një rënie të konsiderueshme të performancës). Një mundësi tjetër është përdorimi i konfigurimit "Config::static_memory_guard_size(1 < 36)" për të rritur numrin e faqeve mbrojtëse të memories (Guard Page, që shkakton një përjashtim kur aksesohet), të vendosura në diapazonin problematik të memories virtuale (shkakton rezervimin e një sasie të madhe të memories virtuale dhe kufizimin e numrit të aplikacioneve WebAssembly që mund të ekzekutohen njëkohësisht).
Burimi: opennet.ru
