Kritisk sårbarhed i Wasmtime, runtime for WebAssembly-applikationer

De korrigerende opdateringer Wasmtime 6.0.1, 5.0.1 og 4.0.1 løste sårbarheden (CVE-2023-26489), som blev tildelt et kritisk fareniveau. Sårbarheden gør det muligt at skrive data til et hukommelsesområde uden for de tilladte grænser for isoleret WebAssembly-kode, som potentielt kan bruges af en angriber til at udføre deres kode uden for det isolerede WASI-miljø.

Wasmtime er en runtime til at køre WebAssembly-applikationer med WASI-udvidelser (WebAssembly System Interface) som almindelige stand-alone-applikationer. Værktøjssættet er skrevet på Rust-sproget, og sårbarheden er forårsaget af en logisk fejl ved at definere lineære hukommelsesadresseringsregler i Cranelift-kodegeneratoren, som oversætter en mellemrepræsentation uafhængig af hardwarearkitekturer til eksekverbar maskinkode for x86_64-arkitekturen.

Især for WebAssembly-applikationer blev 35-bit effektive adresser beregnet i stedet for 33-bit adresser tilladt i WebAssembly, hvilket flyttede grænsen for virtuel hukommelse tilladt til læse- og skriveoperationer til 34 GB, mens sandbox-miljøindstillingerne giver beskyttelse for 6 GB fra basisadressen. Som et resultat var det virtuelle hukommelsesområde fra 6 til 34 GB fra basisadressen tilgængeligt til læsning og skrivning fra WebAssembly-applikationer. Denne hukommelse kan være vært for andre WebAssembly-miljøer eller WebAssembly-runtime-komponenter.

Hvis det ikke er muligt at opdatere Wasmtime-versionen, er en løsning for at blokere fejlen at angive "Config::static_memory_maximum_size(0)"-indstillingen for at aktivere en separat grænsekontrol på alle lineære hukommelsesadgange (hvilket resulterer i en betydelig ydeevnestraf) . En anden mulighed er at bruge indstillingen "Config::static_memory_guard_size(1 < 36)" til at øge antallet af Guard Pages (en undtagelse, der er smidt, når de åbnes) placeret i det problematiske virtuelle hukommelsesområde (hvilket resulterer i at reservere en stor mængde virtuel hukommelse og begrænsning af antallet, der samtidig kører WebAssembly-applikationer).

Kilde: opennet.ru

Tilføj en kommentar