In de correctieve updates van Wasmtime 6.0.1, 5.0.1 en 4.0.1 is een kwetsbaarheid (CVE-2023-26489) verholpen die als kritiek is geclassificeerd. Deze kwetsbaarheid stelt een aanvaller in staat om gegevens te schrijven naar een geheugengebied buiten de toegestane grenzen voor geïsoleerde WebAssembly-code, wat potentieel kan worden gebruikt om code buiten de geïsoleerde omgeving van WASI uit te voeren.
Wasmtime is een runtime voor het uitvoeren van WebAssembly-toepassingen met WASI (WebAssembly System Interface) extensies als gewone geïsoleerde toepassingen. De toolkit is geschreven in Rust, en de kwetsbaarheid is veroorzaakt door een logische fout bij het definiëren van de regels voor lineaire geheugenadressering in de Cranelift-codegenerator die een hardware-onafhankelijke tussentijdse representatie vertaalt naar uitvoerbare machinecode voor de x86_64-architectuur.
Voor WebAssembly-toepassingen werden 35-bits effectieve adressen berekend in plaats van de in WebAssembly toegestane 33-bits adressen, waardoor de grens voor lees- en schrijfoperaties in virtueel geheugen tot 34 GB werd verschoven, terwijl de instellingen van de sandbox-omgeving bescherming bieden voor 6 GB vanaf het basisadres. Hierdoor was het bereik van virtueel geheugen van 6 tot 34 GB vanaf het basisadres beschikbaar voor lezen en schrijven vanuit WebAssembly-toepassingen. In dit geheugen kunnen andere WebAssembly-omgevingen of componenten van de WebAssembly-runtime worden geplaatst.
Als het niet mogelijk is om de versie van Wasmtime bij te werken, worden als alternatieve oplossingen om de fout te blokkeren beschreven het opgeven van de optie 'Config::static_memory_maximum_size(0)' om een verplichte afzonderlijke grenscontrole in te schakelen bij elke toegang tot het lineaire geheugen (leidt tot aanzienlijke prestatievermindering). Een andere optie is het gebruik van de instelling 'Config::static_memory_guard_size(1 < 36)' om het aantal geheugenkanten (Guard Page, die een uitzondering genereert bij toegang) dat in het problematische bereik van virtueel geheugen wordt geplaatst, te verhogen (leidt tot het reserveren van een groot volume virtueel geheugen en het beperken van het aantal gelijktijdig uitgevoerde WebAssembly-toepassingen).
Bron: opennet.ru
