Vulnérabilité critique en vm2 (CVE-2026-26956) : casse le bac à sable et permet d'exécuter des commandes sur l'hôte avec Node.js 25

Publié 4 min de lectura 99 lecture

Une défaillance critique dans la bibliothèque de bac à sable pour Node.js vm2 - enregistré comme CVE-2026-26956- permet à un code malveillant d'échapper à la cage et d'exécuter des commandes arbitraires dans l'hôte. La vulnérabilité a été confirmée au moins dans la version 3.10.4 et le responsable a publié une explosion d'essai de concept, ce qui en fait une menace pratique pour les services qui utilisent le code tiers en temps réel.

vm2 est largement utilisé dans les plateformes d'apprentissage, les éditeurs en ligne, les automatismes et les applications SaaS qui acceptent et exécutent des scripts utilisateurs, avec plus de 1,3 million de téléchargements par semaine en npm. La mécanique par défaut n'est pas un pontage JavaScript classique : la librairie fait confiance aux protections de niveau JavaScript - enveloppes (proxies) et assainissement d'objets entre contextes - mais traitement des exceptions au niveau de l'assemblage Web en V8 permet d'intercepter les erreurs avant que ces protections agissent. Selon l'avertissement officiel, le vecteur exploite le symbole de conversion → chaîne pour provoquer un TypeError spécialement construit qui fait un objet d'erreur du côté de l'hôte "filtré" au bac à sable sans être guéri; de cette instance corrompue, les attaquants peuvent voyager la chaîne des constructeurs et atteindre interals commeprocessus, ouvrant la porte à l'exécution à distance.

Vulnérabilité critique en vm2 (CVE-2026-26956) : casse le bac à sable et permet d'exécuter des commandes sur l'hôte avec Node.js 25
Image générée avec IA.

Il est important de souligner que le responsable indique que le problème a été reproduit dans des environnements où Node.js 25 (vérifié 25.6.1) lorsque les fonctions de gestion des exceptions de WebAssembly et JSTag sont activées. Cependant, comme vm2 a souffert de vulnérabilités répétées à l'évacuation des bacs à sable ces dernières années, l'émergence d'exploitations publiques et la complexité de l'écosystème V8 augmentent le risque de découvertes ou de chaînes d'exploitation supplémentaires.

Les conséquences pratiques pour les organisations qui dépendent de vm2 sont claires : une opération à distance peut entraîner l'exfiltration de données, l'accès à des secrets de mémoire ou de disque, des mouvements latéraux à partir de serveurs qui exécutent des sandboxs, ainsi que l'engagement du pipeline d'intégration si ces environnements traitent le code tiers. L'historique des vulnérabilités antérieures dans vm2 renforce la nécessité de ne pas se fier uniquement aux contrôles d'isolement mis en place au niveau linguistique.

Afin d'atténuer le risque immédiatement et de façon pragmatique, la recommandation directe est de mettre à jour : vm2 version 3.10.5 ou supérieur(le responsable a publié la correction dans le dépôt; voir l'avis technique dans GitHub et les versions). S'il n'est pas possible d'appliquer le patch immédiatement, évaluer la désactivation des fonctionnalités de la manipulation d'exception de WebAssembly et JSTag dans les environnements touchés, éviter d'exécuter vm2 sur Node.js 25 jusqu'à ce que la configuration sécurisée soit confirmée, ou supprimer temporairement l'exécution du code sans revoir. La page du responsable contient les deux conseils techniques comme le libérer des artefacts 3.10.5 qui corrige l'échec.

Vulnérabilité critique en vm2 (CVE-2026-26956) : casse le bac à sable et permet d'exécuter des commandes sur l'hôte avec Node.js 25
Image générée avec IA.

Au-delà du patch, il est approprié d'appliquer les principes de réduction de surface et de défense en profondeur : exécuter des bacs à sable dans des processus isolés avec des privilèges minimums du système d'exploitation, les contenir avec des conteneurs dédiés ou des VM, appliquer des contrôles stricts du réseau et des politiques d'évacuation, utiliser des mécanismes de contrôle des ressources (cgroups, limites CPU / mémoire) et minimiser l'exposition des secrets dans les environnements de fonctionnement. Il est également recommandé d'implémenter la détection et la réponse à des comportements anormaux (exécution de commande système, accès à des routes sensibles) et de faire pivoter les identifiants qui ont pu être accessibles à partir de bacs à sable compromis.

Pour les équipements de développement et de sécurité qui gèrent les dépendances, il est approprié de vérifier où vm2 est utilisé dans les dépôts et les pipelines, de définir des versions dans le gestionnaire de paquets, d'ajouter des contrôles de sécurité dans CI pour détecter et bloquer les versions vulnérables, et de coordonner les tests de vulnérabilité, y compris l'analyse PoC publiée pour comprendre la portée dans votre environnement. Compte tenu de la rapidité avec laquelle les exploits publics sont apparus, il est essentiel d'adopter un modèle de responsabilité partagée entre les responsables et les consommateurs.

Cet incident met en lumière deux leçons : premièrement, l'isolement robuste dans les environnements JavaScript est complexe et fragile lorsqu'il interagit avec des couches plus profondes du moteur en marche; et deuxièmement, que les organisations ne devraient pas se fier uniquement au sandboxing de niveau linguistique pour exécuter un code peu fiable. Le maintien d'unités à jour, l'application rapide des correctifs et la prise de mesures de confinement supplémentaires sont des mesures qui réduisent considérablement les risques jusqu'à ce que l'architecture de mise en oeuvre puisse être refaite avec des contrôles plus stricts.

Couverture

Autres

Plus de nouvelles sur le même sujet.