Vulnerabilitat crítica a Wasmtime, temps d'execució per a aplicacions WebAssembly

Les actualitzacions correctives Wasmtime 6.0.1, 5.0.1 i 4.0.1 van solucionar la vulnerabilitat (CVE-2023-26489), a la qual se li va assignar un nivell crític de perill. La vulnerabilitat permet que les dades s'escriguin en una àrea de memòria fora dels límits permesos per al codi WebAssembly aïllat, que podria ser utilitzat per un atacant per executar el seu codi fora de l'entorn WASI aïllat.

Wasmtime és un temps d'execució per executar aplicacions WebAssembly amb extensions WASI (WebAssembly System Interface) com a aplicacions autònomes habituals. El conjunt d'eines està escrit en el llenguatge Rust i la vulnerabilitat és causada per un error lògic en definir les regles d'adreçament de memòria lineal al generador de codi Cranelift, que tradueix una representació intermèdia independent de les arquitectures de maquinari en codi de màquina executable per a l'arquitectura x86_64.

En particular, per a les aplicacions WebAssembly, es van calcular adreces efectives de 35 bits en lloc de les adreces de 33 bits permeses a WebAssembly, que va canviar el límit de memòria virtual permesa per a les operacions de lectura i escriptura a 34 GB, mentre que la configuració de l'entorn sandbox ofereix protecció per 6 GB de l'adreça base. Com a resultat, l'interval de memòria virtual de 6 a 34 GB des de l'adreça base estava disponible per llegir i escriure des d'aplicacions WebAssembly. Aquesta memòria pot allotjar altres entorns WebAssembly o components d'execució de WebAssembly.

Si no és possible actualitzar la versió de Wasmtime, una solució alternativa per bloquejar l'error és especificar l'opció "Config::static_memory_maximum_size(0)" per habilitar una comprovació de límits independent en tots els accessos de memòria lineal (que resulta en una penalització de rendiment important) . Una altra opció és utilitzar el paràmetre "Config::static_memory_guard_size(1 < 36)" per augmentar el nombre de pàgines de guàrdia (una excepció llançada quan s'accedeix) col·locades a l'interval de memòria virtual problemàtic (que resulta en reservar una gran quantitat de memòria virtual i limitant el nombre d'aplicacions WebAssembly que s'executen simultàniament).

Font: opennet.ru

Afegeix comentari