Kritika vundebleco en Wasmtime, rultempo por WebAssembly-aplikoj

La korektaj ĝisdatigoj Wasmtime 6.0.1, 5.0.1 kaj 4.0.1 riparis la vundeblecon (CVE-2023-26489), al kiu estis asignita kritika nivelo de danĝero. La vundebleco permesas al datumoj esti skribitaj al memorareo ekster la limoj permesitaj por izolita WebAssembly-kodo, kiu eble povus esti uzita fare de atakanto por efektivigi sian kodon ekster la izolita WASI-medio.

Wasmtime estas rultempo por ruli WebAssembly-aplikaĵojn kun WASI (WebAssembly System Interface) etendaĵoj kiel regulaj memstaraj aplikoj. La ilaro estas skribita en la Rust-lingvo, kaj la vundebleco estas kaŭzita de logika eraro en difinado de linearaj memoraj adresreguloj en la Cranelift-kodgeneratoro, kiu tradukas mezan reprezentantaron sendependan de hardvararkitekturoj en plenumeblan maŝinkodon por la x86_64-arkitekturo.

Aparte, por WebAssembly-aplikoj, 35-bitaj efikaj adresoj estis kalkulitaj anstataŭe de la 33-bitaj adresoj permesitaj en WebAssembly, kiu ŝanĝis la limon de virtuala memoro permesita por legado kaj skribado de operacioj al 34 Gb, dum la sablokesto-medio-agordoj disponigas protekton por 6 GB de la baza adreso. Kiel rezulto, la virtuala memorintervalo de 6 ĝis 34 GB de la baza adreso estis havebla por legado kaj skribo de WebAssembly-aplikoj. Ĉi tiu memoro povas gastigi aliajn WebAssembly-mediojn aŭ WebAssembly rultempajn komponentojn.

Se ne eblas ĝisdatigi la Wasmtime-version, solvo por blokado de la eraro estas specifi la opcion "Config::static_memory_maximum_size(0)" por ebligi apartan kontrolon de limoj ĉe ĉiuj liniaj memoraliroj (rezultante signifan rendimentan punon) . Alia opcio estas uzi la agordon "Config::static_memory_guard_size(1 < 36)" por pliigi la nombron da Gvardiaj Paĝoj (escepto ĵetita kiam alirite) metitaj en la probleman virtualan memorintervalon (rezultante rezervi grandan kvanton da virtuala memoro kaj limigante la nombron samtempe kurante WebAssembly-aplikojn).

fonto: opennet.ru

Aldoni komenton