vm2 - CVE-2026-26956

Date de publication :

Il s'agit d'une vulnérabilité d'échappement de sandbox dans la bibliothèque vm2 pour Node.js, spécifique aux environnements Node.js v25 avec support des exceptions WebAssembly et de WebAssembly.JSTag.

vm2 est une bibliothèque open source pour Node.js, disponible sur npm, conçue pour exécuter du code JavaScript non fiable dans un environnement sandbox isolé. Elle repose sur la transformation de code source et des objets Proxy JavaScript pour intercepter les accès aux ressources du système hôte. La bibliothèque est officiellement dépréciée depuis 2023, mais toujours activement utilisée avec plus de 1,3 million de téléchargements hebdomadaires.

L'instruction WASM try_table intercepte les exceptions JavaScript au niveau C++ du moteur V8, en dessous des filtres JavaScript de vm2. Un objet TypeError hôte non assaini peut ainsi atteindre le contexte attaquant via un retour de valeur WASM. La chaîne de prototypes de cet objet permet d'accéder au constructeur Function hôte, puis à l'objet process.

Elle permet à un attaquant dont le code est exécuté dans VM.run() d'échapper au sandbox et d'exécuter des commandes arbitraires sur le système hôte.

Informations

La faille est activement exploitée : Non

Un correctif existe : Oui

Une mesure de contournement existe : Oui

Risques

•   Exécution de code arbitraire (à distance)
•   Contournement de la politique de sécurité

Exploitation

La vulnérabilité exploitée est du type
CWE-693 : Protection Mechanism Failure

Détails sur l'exploitation
•   Vecteur d'attaque : Réseau
•   Complexité de l'attaque : Faible
•   Privilèges nécessaires pour réaliser l'attaque : Aucun
•   Interaction d'un utilisateur ayant accès au produit est-elle nécessaire : Non
•   L'exploitation de la faille permet d'obtenir des droits privilégiés : Oui

Preuve de concept
Une preuve de concept est disponible en sources ouvertes.

Systèmes ou composants affectés

•   vm2 version 3.10.4 (en combinaison avec Node.js v25 ou supérieur avec support WebAssembly exception handling)
•   Versions antérieures (bibliothèque dépréciée, sans correctif sur les branches EOL)

Contournement provisoire

Ne pas utiliser vm2 pour l'exécution de code non fiable sur des environnements Node.js v25.

Solutions ou recommandations

vm2 version 3.10.5 et supérieures (migration vers une alternative telle que isolated-vm fortement recommandée par le mainteneur en raison de la dépréciation officielle)