Kritiese kwesbaarheid in Wasmtime, looptyd vir WebAssembly-toepassings

Wasmtime 6.0.1, 5.0.1 en 4.0.1 korrektiewe opdaterings stel die kwesbaarheid reg (CVE-2023-26489), wat as krities gegradeer is. Die kwesbaarheid maak dit moontlik om data te organiseer na 'n geheue-area buite die grense wat toegelaat word vir geïsoleerde WebAssembly-kode, wat moontlik deur 'n aanvaller gebruik kan word om die uitvoering van hul kode buite die geïsoleerde WASI-omgewing te organiseer.

Wasmtime is 'n looptyd om WebAssembly-toepassings te laat loop met WASI (WebAssembly System Interface) uitbreidings as normale selfstandige toepassings. Die gereedskapstel is in Rust geskryf, en die kwesbaarheid word veroorsaak deur 'n logiese fout in die definisie van lineêre geheue-aanspreekreëls in die Cranelift-kodegenerator, wat 'n intermediêre voorstelling onafhanklik van hardeware-argitekture in uitvoerbare masjienkode vir die x86_64-argitektuur vertaal.

In die besonder, 35-bis effektiewe adresse is bereken vir WebAssembly toepassings in plaas van 33-bis adresse wat toegelaat word in WebAssembly, wat die limiet van virtuele geheue toegelaat vir lees en skryf bewerkings na 34 GB verskuif het, terwyl die sandbox omgewing instellings beskerming bied vir 6 GB vanaf die basisadres. As gevolg hiervan was die reeks virtuele geheue van 6 tot 34 GB vanaf die basisadres beskikbaar vir lees en skryf vanaf WebAssembly-toepassings. Hierdie geheue kan ander WebAssembly-omgewings of WebAssembly-looptydkomponente huisves.

As dit nie moontlik is om die Wasmtime-weergawe op te gradeer nie, word die spesifikasie van die "Config::static_memory_maximum_size(0)"-opsie om verpligte afsonderlike grense-kontrolering op enige lineêre geheuetoegang moontlik te maak, genoem as oplossings om die fout te blokkeer (dit lei tot aansienlike prestasie-agteruitgang). Nog 'n opsie is om die instelling "Config::static_memory_guard_size(1 < 36)" te gebruik om die aantal wagbladsye te verhoog (Guard Page, 'n uitsondering word gegooi wanneer toegang verkry word) geleë in die problematiese virtuele geheuereeks (lei tot die bespreking van 'n groot hoeveelheid van virtuele geheue en die beperking van die aantal gelyktydige WebAssembly-toepassings).

Bron: opennet.ru

Voeg 'n opmerking