Kritická zranitelnost ve Wasmtime, runtime pro aplikace WebAssembly

Opravné aktualizace Wasmtime 6.0.1, 5.0.1 a 4.0.1 opravily zranitelnost (CVE-2023-26489), které byla přiřazena kritická úroveň nebezpečí. Tato chyba zabezpečení umožňuje zapisovat data do paměťové oblasti mimo hranice povolené pro izolovaný kód WebAssembly, který by mohl útočník potenciálně použít ke spuštění svého kódu mimo izolované prostředí WASI.

Wasmtime je runtime pro spouštění aplikací WebAssembly s rozšířeními WASI (WebAssembly System Interface) jako běžné samostatné aplikace. Sada nástrojů je napsána v jazyce Rust a zranitelnost je způsobena logickou chybou při definování pravidel lineárního adresování paměti v generátoru kódu Cranelift, který převádí přechodnou reprezentaci nezávislou na hardwarových architekturách do spustitelného strojového kódu pro architekturu x86_64.

Konkrétně u aplikací WebAssembly byly počítány 35bitové efektivní adresy namísto 33bitových adres povolených v WebAssembly, což posunulo limit virtuální paměti povolené pro operace čtení a zápisu na 34 GB, zatímco nastavení prostředí sandbox poskytuje ochranu pro 6 GB ze základní adresy. Výsledkem bylo, že pro čtení a zápis z aplikací WebAssembly byl k dispozici rozsah virtuální paměti od 6 do 34 GB ze základní adresy. Tato paměť může hostit další prostředí WebAssembly nebo běhové komponenty WebAssembly.

Pokud není možné aktualizovat verzi Wasmtime, řešením pro zablokování chyby je zadat volbu „Config::static_memory_maximum_size(0)“, která povolí samostatnou kontrolu mezí pro všechny lineární přístupy do paměti (což má za následek výrazné snížení výkonu) . Další možností je použít nastavení „Config::static_memory_guard_size(1 < 36)“ ke zvýšení počtu Guard Pages (výjimka vyvolaná při přístupu) umístěných v problematickém rozsahu virtuální paměti (což má za následek rezervaci velkého množství virtuální paměti a omezení počtu současně spuštěných aplikací WebAssembly).

Zdroj: opennet.ru

Přidat komentář