Les mises Ă jour correctives de Wasmtime 6.0.1, 5.0.1 et 4.0.1 ont corrigĂ© une vulnĂ©rabilitĂ© (CVE-2023-26489) classĂ©e comme critique. Cette vulnĂ©rabilitĂ© permet d'Ă©crire des donnĂ©es dans une zone mĂ©moire en dehors des limites autorisĂ©es pour le code WebAssembly isolĂ©, ce qui peut potentiellement ĂȘtre exploitĂ© par un attaquant pour exĂ©cuter son propre code en dehors de l'environnement isolĂ© WASI.
Wasmtime est un runtime pour l'exécution d'applications WebAssembly avec des extensions WASI (WebAssembly System Interface) comme des applications isolées habituelles. L'outil est écrit en Rust, et la vulnérabilité est causée par une erreur logique dans la définition des rÚgles d'adressage mémoire linéaire dans le générateur de code Cranelift, qui traduit une représentation intermédiaire indépendante de l'architecture matérielle en code machine exécutable pour l'architecture x86_64.
En particulier, pour les applications WebAssembly, des adresses effectives de 35 bits ont Ă©tĂ© calculĂ©es au lieu des adresses de 33 bits autorisĂ©es par WebAssembly, ce qui dĂ©calait la limite des opĂ©rations de lecture et d'Ă©criture de la mĂ©moire virtuelle jusqu'Ă 34 Go, tandis que les paramĂštres de l'environnement sandbox fournissent une protection pour 6 Go Ă partir de l'adresse de base. En fin de compte, la plage de mĂ©moire virtuelle de 6 Ă 34 Go Ă partir de l'adresse de base Ă©tait accessible en lecture et Ă©criture depuis les applications WebAssembly. Dans cette mĂ©moire, d'autres environnements WebAssembly ou composants du runtime WebAssembly peuvent ĂȘtre placĂ©s.
En cas d'impossibilitĂ© de mettre Ă jour la version de Wasmtime, comme solutions de contournement pour bloquer l'erreur, il est mentionnĂ© de spĂ©cifier l'option «Config::static_memory_maximum_size(0)» pour activer un contrĂŽle strict des limites lors de tout accĂšs Ă la mĂ©moire linĂ©aire (ce qui entraĂźne une diminution significative des performances). Une autre option consiste Ă utiliser la configuration «Config::static_memory_guard_size(1 < 36)» pour augmenter le nombre de pages de mĂ©moire de garde (Guard Page, provoquant une exception lors de l'accĂšs) placĂ©es dans la plage de mĂ©moire virtuelle problĂ©matique (ce qui entraĂźne la rĂ©servation d'un volume Ă©levĂ© de mĂ©moire virtuelle et la limitation du nombre d'applications WebAssembly pouvant ĂȘtre exĂ©cutĂ©es simultanĂ©ment).
Source : opennet.ru
