V aktualizacích Wasmtime 6.0.1, 5.0.1 a 4.0.1 byla odstraněna zranitelnost (CVE-2023-26489), která byla klasifikována jako kritická. Tato zranitelnost umožňuje zápis dat do oblasti paměti mimo povolené hranice pro izolovaný kód WebAssembly, což může být potenciálně zneužito útočníkem k provádění vlastního kódu mimo izolované prostředí WASI.
Wasmtime je runtime pro běh aplikací WebAssembly s rozšířeními WASI (WebAssembly System Interface) jako běžných izolovaných aplikací. Nástroj je napsán v jazyce Rust a zranitelnost je způsobena logickou chybou při definování pravidel lineární adresace paměti v generátoru kódu Cranelift, který převádí hardwarově nezávislé mezipředstavění na spustitelný strojový kód pro architekturu x86_64.
Konkrétně pro aplikace WebAssembly byly počítány 35bitové efektivní adresy místo povolených 33bitových adres ve WebAssembly, což posunulo hranici povolené pro operace čtení a zápisu virtuální paměti na 34 GB, zatímco nastavení sandboxového prostředí poskytuje ochranu pro 6 GB od základní adresy. Výsledkem bylo, že rozsah virtuální paměti od 6 do 34 GB od základní adresy byl přístupný pro čtení a zápis z aplikací WebAssembly. V této paměti mohou být umístěna jiná prostředí WebAssembly nebo komponenty runtime WebAssembly.
Pokud není možné aktualizovat verzi Wasmtime, jako obcházející možnosti pro zablokování chyby se uvádí nastavení volby „Config::static_memory_maximum_size(0)“ pro zahrnutí povinné samostatné kontroly hranic při jakémkoli přístupu k lineární paměti (což vede k významnému snížení výkonu). Další možností je použít nastavení „Config::static_memory_guard_size(1 < 36)“ pro zvýšení počtu strážných stránek paměti (Guard Page, při přístupu se generuje výjimka), umístěných v problematickém rozsahu virtuální paměti (to vede k rezervaci velkého objemu virtuální paměti a omezení počtu současně běžících aplikací WebAssembly).
Zdroj: opennet.ru
