Kriittinen haavoittuvuus Wasmtimessa, ajonaikaisessa WebAssembly-sovelluksissa

Korjaavat päivitykset Wasmtime 6.0.1, 5.0.1 ja 4.0.1 korjasivat haavoittuvuuden (CVE-2023-26489), jolle määritettiin kriittinen vaarataso. Haavoittuvuus mahdollistaa tietojen kirjoittamisen muistialueelle, joka ei salli eristetyn WebAssembly-koodin rajoja. Hyökkääjä voi mahdollisesti käyttää koodiaan eristetyn WASI-ympäristön ulkopuolella.

Wasmtime on ajonaika WebAssembly-sovellusten suorittamiseen WASI-laajennuksilla (WebAssembly System Interface) tavallisina itsenäisinä sovelluksina. Työkalusarja on kirjoitettu Rust-kielellä, ja haavoittuvuus johtuu loogisesta virheestä määriteltäessä lineaarisia muistiosoitteita koskevia sääntöjä Cranelift-koodigeneraattorissa, joka kääntää laitteistoarkkitehtuureista riippumattoman väliesityksen suoritettavaksi konekoodiksi x86_64-arkkitehtuurille.

Erityisesti WebAssembly-sovelluksille laskettiin 35-bittiset tehokkaat osoitteet WebAssemblyssa sallittujen 33-bittisten osoitteiden sijaan, mikä siirsi luku- ja kirjoitustoimintojen virtuaalimuistin rajan 34 Gt:iin, kun taas hiekkalaatikkoympäristön asetukset suojaavat 6 Gt perusosoitteesta. Tämän seurauksena virtuaalimuistialue 6–34 Gt perusosoitteesta oli käytettävissä WebAssembly-sovellusten lukemista ja kirjoittamista varten. Tämä muisti voi isännöidä muita WebAssembly-ympäristöjä tai WebAssembly-ajonaikaisia ​​komponentteja.

Jos Wasmtime-versiota ei ole mahdollista päivittää, voit estää virheen määrittämällä "Config::static_memory_maximum_size(0)" -vaihtoehdon, joka mahdollistaa erillisen rajojen tarkistuksen kaikissa lineaarisissa muistin käytöissä (johtaen merkittävään suorituskykyyn). . Toinen vaihtoehto on käyttää "Config::static_memory_guard_size(1 < 36)" -asetusta lisätäksesi ongelmalliselle virtuaalimuistialueelle sijoitettujen suojasivujen määrää (poikkeus, kun niitä käytetään) (jolloin varataan suuri määrä virtuaalimuistia ja rajoittaa samanaikaisesti WebAssembly-sovellusten määrää).

Lähde: opennet.ru

Lisää kommentti