Kritikal na kahinaan sa Wasmtime, runtime para sa mga application ng WebAssembly

Inaayos ng Wasmtime 6.0.1, 5.0.1, at 4.0.1 corrective update ang kahinaan (CVE-2023-26489), na na-rate na Kritikal. Ang kahinaan ay nagbibigay-daan sa pag-aayos ng pagsusulat ng data sa isang lugar ng memorya sa labas ng mga hangganan na pinapayagan para sa nakahiwalay na WebAssembly code, na posibleng magamit ng isang umaatake upang ayusin ang pagpapatupad ng kanilang code sa labas ng nakahiwalay na kapaligiran ng WASI.

Ang Wasmtime ay isang runtime para sa pagpapatakbo ng mga WebAssembly na application na may mga extension ng WASI (WebAssembly System Interface) bilang mga normal na standalone na application. Ang toolkit ay nakasulat sa Rust, at ang kahinaan ay sanhi ng isang lohikal na error sa kahulugan ng linear memory addressing rules sa Cranelift code generator, na nagsasalin ng isang intermediate na representasyon na independiyente sa mga arkitektura ng hardware sa executable machine code para sa x86_64 architecture.

Sa partikular, ang 35-bit na epektibong mga address ay kinakalkula para sa mga aplikasyon ng WebAssembly sa halip na mga 33-bit na address na pinapayagan sa WebAssembly, na inilipat ang limitasyon ng virtual memory na pinapayagan para sa pagbabasa at pagsulat ng mga operasyon sa 34 GB, habang ang mga setting ng kapaligiran ng sandbox ay nagbibigay ng proteksyon para sa 6 GB mula sa base address. Bilang resulta, ang hanay ng virtual memory mula 6 hanggang 34 GB mula sa base address ay magagamit para sa pagbabasa at pagsusulat mula sa mga application ng WebAssembly. Ang memorya na ito ay maaaring mag-host ng iba pang mga kapaligiran ng WebAssembly o mga bahagi ng runtime ng WebAssembly.

Kung hindi posible na i-update ang bersyon ng Wasmtime, ang pagtukoy sa opsyon na "Config::static_memory_maximum_size(0)" upang paganahin ang mandatoryong hiwalay na bounds checking sa anumang linear memory access ay binanggit bilang mga workaround upang harangan ang error (nagreresulta sa makabuluhang pagkasira ng pagganap). Ang isa pang pagpipilian ay ang paggamit ng setting na "Config::static_memory_guard_size(1 < 36)" upang madagdagan ang bilang ng mga pahina ng bantay (Guard Page, isang exception ang itinapon kapag na-access) na matatagpuan sa may problemang virtual memory range (humahantong sa pagreserba ng malaking halaga ng virtual memory at nililimitahan ang bilang ng mga kasabay na aplikasyon ng WebAssembly).

Pinagmulan: opennet.ru

Magdagdag ng komento