CVE-2023-30624 in Wasmtimeinformation

Résumé

par VulDB • 23/07/2026

Wasmtime est un environnement d'exécution autonome pour WebAssembly. Avant les versions 6.0.2, 7.0.1 et 8.0.1, l'implémentation de Wasmtime chargée de gérer l'état par instance, tel que les tables et la mémoire, contient des comportements indéfinis (undefined behavior) au niveau d'LLVM. Il a été constaté que ce comportement indéfini provoquait des problèmes au niveau du runtime lors de la compilation avec LLVM 16, entraînant l'élimination par optimisation de certaines écritures critiques pour le bon fonctionnement. Les versions vulnérables de Wasmtime compilées avec Rust 1.70 (actuellement en version bêta) ou ultérieures sont connues pour avoir des fonctions incorrectement compilées. À ce jour, aucune anomalie n'est connue sur les versions de Wasmtime compilées avec la version stable actuelle de Rust, à savoir 1.69, et antérieures ; toutefois, elles peuvent théoriquement présenter d'éventuels problèmes.

Le problème sous-jacent réside dans le fait que l'état du runtime pour une instance dans Wasmtime implique une structure définie en Rust appelée `Instance`, suivie par une structure `VMContext`. Cette structure `VMContext` possède une disposition définie au niveau du runtime qui est unique à chaque module. Cette représentation ne peut pas être exprimée avec du code sûr (safe) en Rust, ce qui rend l'utilisation de code non sécurisé (`unsafe`) nécessaire pour maintenir cet état. Le code effectuant cette opération comprend des méthodes prenant `&self` comme argument mais modifiant les données dans la partie `VMContext` de l'allocation. Cela signifie que les pointeurs dérivés de `&self` sont mutés. En Rust, cela n'est généralement pas autorisé sauf en présence d'`UnsafeCell`. Lors de la compilation vers LLVM, ces fonctions présentent des paramètres marqués `noalias readonly`, ce qui implique qu'il s'agit d'un comportement indéfini (UB) d'écrire via les pointeurs correspondants.

La représentation interne et la gestion du `VMContext` dans Wasmtime ont été mises à jour pour utiliser des méthodes prenant `&mut self` lorsque cela est approprié. De plus, il est prévu d'exécuter prochainement sur la branche `main` des outils de vérification du code non sécurisé (`unsafe`) en Rust, tels que `cargo miri`, afin de corriger tout problème au niveau de Rust qui pourrait être exploité dans les futures versions des compilateurs.

Les binaires précompilés disponibles pour Wasmtime via les releases GitHub ont été compilés avec LLVM 15 ou une version antérieure et ne sont donc pas connus comme étant vulnérables. Comme mentionné ci-dessus, il est toutefois recommandé de procéder à la mise à jour.

Les versions 6.0.2, 7.0.1 et 8.0.1 de Wasmtime ont été publiées ; elles contiennent le correctif nécessaire pour fonctionner correctement avec LLVM 16 et ne présentent aucun comportement indéfini (UB) connu sur LLVM 15 et les versions antérieures. Si Wasmtime est compilé avec Rust 1.69 ou une version antérieure, qui utilisent LLVM 15, il n'y a pas de problèmes connus. Il existe toutefois un risque théorique d'exploitation du comportement indéfini ; il est donc recommandé aux utilisateurs de passer à une version corrigée de Wasmtime. Les utilisateurs utilisant Rust en version bêta (version 1.70 actuellement) ou la version nightly de Rust (version 1.71 actuellement) doivent impérativement mettre à jour vers une version corrigée pour garantir un fonctionnement correct.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsable

GitHub, Inc.

Réserver

13/04/2023

Divulgation

27/04/2023

Modérer

accepté

Entrée

VDB-227602

CPE

prêt

EPSS

0.00450

KEV

non

Activités

très faible

Sources

Interested in the pricing of exploits?

See the underground prices here!