Gemiddeld · 5.4 Node.js & npm GHSA-6w8r-xxw2-g3hx CVE-2026-92938 GHSA-8686-vhfx-7r3j CVE-2026-92957
Zes sandbox-ontsnappingslekken in vm2 maken willekeurige code-executie op de host mogelijk
Zes kwetsbaarheden in de JavaScript-sandboxbibliotheek vm2, waarvan meerdere kritiek (CVSS 9.4), stellen gesandboxte code in staat om uit de NodeVM-isolatie te breken en host-builtins zoals node:sqlite, child_process en fs/promises te bereiken. Dit maakt native code-executie, commando-uitvoering en bestandsschrijfacties op de host mogelijk. Alle problemen zijn verholpen in vm2 3.11.7.
- GitHub Advisory Database database 1w geleden · bekijk ↗
- NVD (NIST) database 3w geleden · bekijk ↗
- GitHub Advisory Database database 1w geleden · bekijk ↗
- NVD (NIST) database 2w geleden · bekijk ↗
- GitHub Advisory Database database 1w geleden · bekijk ↗
- NVD (NIST) database 3w geleden · bekijk ↗
- GitHub Advisory Database database 1w geleden · bekijk ↗
- NVD (NIST) database 3w geleden · bekijk ↗
- GitHub Advisory Database database 1w geleden · bekijk ↗
- NVD (NIST) database 2w geleden · bekijk ↗
- GitHub Advisory Database database 1w geleden · bekijk ↗
- NVD (NIST) database 3w geleden · bekijk ↗
AI-samenvatting
Er zijn zes afzonderlijke kwetsbaarheden onthuld in vm2, een Node.js-bibliotheek die wordt gebruikt om niet-vertrouwde JavaScript-code in een sandbox (NodeVM) uit te voeren. Alle zes komen voort uit tekortkomingen in de manier waarop vm2 de toegang van gesandboxte code tot Node.js-builtinmodules en objectbeveiligingen zoals freeze/readonly beperkt. Drie van de problemen hebben een CVSS-score van 9.4 en stellen gesandboxte code in staat volledig uit de isolatie te breken, met native code-executie of host-commando-uitvoering als gevolg. Een vierde, met score 8.4, maakt schrijfacties op het hostbestandssysteem mogelijk. De overige twee hebben een lagere ernst (6.3 en 2.3) en betreffen zwakkere omzeilingen van objectonveranderlijkheid en module-whitelisting. Alle zes zijn verholpen in vm2 3.11.7.
Wat is er gebeurd
Beveiligingsonderzoekers hebben zes afzonderlijke manieren geïdentificeerd waarop code die binnen de NodeVM-sandbox van vm2 draait, uit de beoogde isolatie kon ontsnappen. De fouten delen een gemeenschappelijke oorzaak: de allowlist/denylist-logica van vm2 voor builtinmodules en de objectbevriezingsbeveiligingen leunen op string-matching en prefix-logica die omzeild kan worden. Drie van de zes problemen (CVE-2026-92938, CVE-2026-92957, CVE-2026-92948) stellen gesandboxte code in staat om host-niveau Node.js-builtins te bereiken die geblokkeerd hadden moeten zijn, met native code-executie of commando-uitvoering op de host als gevolg. Een vierde (CVE-2026-92958) laat gesandboxte code de fs/promises-bestandssysteem-API bereiken ondanks dat fs expliciet is geweigerd, waardoor bestanden op de host geschreven kunnen worden. Een vijfde (CVE-2026-92949) maakt het mogelijk om de vm.freeze()/vm.readonly()-objectbeveiligingen te omzeilen door host-objectsetters rechtstreeks aan te roepen. Een zesde (CVE-2026-92945) stelt gesandboxte code in staat niet-toegestane packages te laden die een naamprefix delen met een wel toegestane module.
Technische oorzaak
CVE-2026-92938: vm2 wrapt de node:sqlite-builtin met vm.readonly(), wat toewijzing van eigenschappen blokkeert maar aanroepbare methoden bereikbaar laat. Omdat de resolver van vm2 slechts één 'node:'-prefix verwijdert, lost een sandboxverzoek voor 'node:node:sqlite' op naar de geconfigureerde node:sqlite-ingang, waardoor gesandboxte code een DatabaseSync-instantie kan aanmaken en loadExtension() kan aanroepen om een native library in het hostproces te laden — met als resultaat willekeurige native code-executie met de rechten van het hostproces. CVE-2026-92957: het wildcard require-beleid van NodeVM ondersteunt negatieve (weiger-)items, maar deze worden vergeleken via exacte stringmatching met canonieke builtinnamen zonder normalisatie van de 'node:'-prefix. Een beleid zoals builtin: ['*', '-node:child_process'] weigert daardoor de canonieke naam 'child_process' niet, waardoor gesandboxte code nog altijd require('child_process') kan uitvoeren en toegang krijgt tot proces-spawnende API's zoals execSync en spawn. CVE-2026-92948: vanaf Node.js 24 toont module.builtinModules een schema-only sleutel 'node:test' die niet gedekt wordt door de op families gebaseerde DANGEROUS_BUILTINS-bescherming van vm2. Omdat de resolver slechts één 'node:'-prefix verwijdert, lost een verzoek voor 'node:node:test' op naar de opgeslagen node:test-ingang. Het aanroepen van node:test.run() stuurt door een aanvaller gecontroleerde execArgv-waarden (zoals --eval=<JavaScript>) door naar een apart host-Node-proces, wat resulteert in willekeurige JavaScript-uitvoering buiten de sandbox. CVE-2026-92958: negatieve denylist-items voor builtins (bijv. '-fs') worden uitsluitend vergeleken op exacte modulenaam, waardoor subpaden zoals fs/promises niet worden gedekt. Gesandboxte code kan daardoor require('fs/promises') of require('node:fs/promises') uitvoeren en bestandssysteem-schrijf/-leesbewerkingen bereiken ondanks dat fs is geweigerd. CVE-2026-92949: de objectbevriezingsbeveiligingen van vm2 (vm.freeze(), vm.readonly()) beperken de toegang tot accessor-eigenschappen onvoldoende. Gesandboxte code kan Object.getOwnPropertyDescriptor() of __lookupSetter__() gebruiken om host-objectsetters te achterhalen en rechtstreeks aan te roepen, waardoor eigenschappen die als alleen-lezen bedoeld waren, toch gewijzigd kunnen worden. CVE-2026-92945: de isPathAllowedForModule-allowlistcontrole gebruikt ruwe stringprefix-matching in plaats van grensgebonden vergelijking, waardoor een modulenaam die een prefix deelt met een toegestane module bereikbaar is via relatieve requires vanuit een toegestaan package, zelfs wanneer transitief laden is uitgeschakeld.
Waarom dit belangrijk is
vm2 is specifiek ontworpen om niet-vertrouwde JavaScript veilig uit te voeren, dus elke sandbox-ontsnapping ondermijnt het kerndoel van de bibliotheek. De drie kritiek beoordeelde fouten (CVSS 9.4) stellen niet-vertrouwde plugin- of scriptcode in staat volledige native code-executie of host-commando-uitvoering te verkrijgen, gelijkwaardig aan het uitvoeren van willekeurige code met de rechten van het host-Node.js-proces. Het bestandssysteemlek (CVSS 8.4) maakt ongeautoriseerd lezen en schrijven buiten de sandbox mogelijk. Toepassingen die vm2 gebruiken om plugins van derden, gebruikersscripts of andere niet-vertrouwde code uit te voeren, lopen direct risico op volledige compromittering van de host als een van deze builtins in hun configuratie is toegestaan.
Wie wordt getroffen
Elke toepassing die NodeVM van vm2 gebruikt om niet-vertrouwde JavaScript te sandboxen, kan getroffen zijn, afhankelijk van welke builtinmodules zijn toegestaan in de configuratie. CVE-2026-92938 vereist dat node:sqlite is toegestaan (expliciet of via builtin: ['*']). CVE-2026-92957 en CVE-2026-92958 treffen configuraties die wildcard require-beleid gebruiken met negatieve (weiger-)items die specifieke builtins moeten blokkeren. CVE-2026-92948 vereist dat node:test expliciet is toegestaan en treft Node.js 24 en nieuwer. CVE-2026-92949 en CVE-2026-92945 treffen respectievelijk het gebruik van vm.freeze()/vm.readonly() en de allowlisting van externe modules, ongeacht de specifieke builtinconfiguratie.
Getroffen versies
CVE-2026-92938 treft vm2-versies 3.11.3 tot en met 3.11.6. CVE-2026-92957 en CVE-2026-92958 treffen vm2-versies tot en met 3.11.6. CVE-2026-92948 en CVE-2026-92949 treffen vm2-versies 3.9.6 tot en met 3.11.6. CVE-2026-92945 treft vm2-versies tot en met 3.11.6. Alle zes problemen zijn verholpen in vm2 3.11.7.
Oplossingen en mitigatie
Alle zes kwetsbaarheden zijn verholpen in vm2 3.11.7. In de beschikbare informatie worden geen gedeeltelijke mitigaties of workarounds anders dan upgraden beschreven.
Aanbevolen actie
Upgrade vm2 zo snel mogelijk naar versie 3.11.7. Controleer tot die tijd uw NodeVM-configuratie: vermijd het toestaan van de builtins node:sqlite of node:test, vertrouw niet op negatieve (weiger-)items in wildcard require-beleid om child_process of fs te blokkeren (aangezien deze omzeild kunnen worden), en beschouw vm.freeze()/vm.readonly() niet als op zichzelf voldoende om eigenschapwijziging te voorkomen. Controleer eventuele allowlists voor externe modules op zwakke prefix-matching.
PatchBriefing-score
5.4 / 10 · Gemiddeld
Officiële CVSS: 9.4
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Waarom deze score
Drie kwetsbaarheden (CVE-2026-92938, CVE-2026-92957, CVE-2026-92948) hebben een CVSS-score van 9.4, wat weerspiegelt dat ze een volledige sandbox-ontsnapping mogelijk maken die resulteert in native code-executie of host-commando-uitvoering, zonder dat meer dan laag-niveau sandboxtoegang of gebruikersinteractie vereist is. Een vierde (CVE-2026-92958) scoort 8.4, wat schrijftoegang tot het hostbestandssysteem weerspiegelt in plaats van volledige code-executie. De overige twee scoren lager: CVE-2026-92949 op 6.3 (een lokale omzeiling van objectonveranderlijkheid) en CVE-2026-92945 op 2.3 (een beperkte omzeiling van module-allowlisting die specifieke prefix-delende omstandigheden en gedeeltelijke rechten vereist). De PatchWire-scores (4.3–5.4 voor de meeste, 1.5 voor de laagste) weerspiegelen dat voor alle problemen een oplossing beschikbaar is en dat er momenteel geen bekende uitbuiting of publieke exploitcode bestaat.
Getroffen versies
- vm2 >= 3.11.3, <= 3.11.6
- kwetsbaar
- ≥ 3.11.7
- gepatcht
- vm2 <= 3.11.6
- kwetsbaar
- ≥ 3.11.7
- gepatcht
- vm2 >= 3.9.6, <= 3.11.6
- kwetsbaar
- ≥ 3.11.7
- gepatcht
- vm2 <= 3.11.6
- kwetsbaar
- ≥ 3.11.7
- gepatcht
- vm2 >= 3.9.6, <= 3.11.6
- kwetsbaar
- ≥ 3.11.7
- gepatcht
- vm2 <= 3.11.6
- kwetsbaar
- ≥ 3.11.7
- gepatcht
Gemelde oplossingen
Alle zes kwetsbaarheden zijn verholpen in vm2 3.11.7. In de beschikbare informatie worden geen gedeeltelijke mitigaties of workarounds anders dan upgraden beschreven.
Hoe dit rapport is gemaakt
12 bronrecords zijn opgehaald, gekoppeld en gebruikt om het rapport hierboven op te stellen.
-
GitHub Advisory Database database
-
NVD (NIST) database
-
GitHub Advisory Database database
-
NVD (NIST) database
-
GitHub Advisory Database database
-
NVD (NIST) database
Revisiegeschiedenis
- Gepubliceerd
- Gegenereerd
Gerelateerd
Relevante veranderingen voor de stacks die je volgt.
Kies je stacks, onderwerpen en eventueel WordPress-plugins. Om 07:00 CEST worden passende meldingen en releases uit de rapportageperiode in één e-mail gegroepeerd.
✓ Kies stacks en onderwerpen✓ Pas voorkeuren altijd aan✓ Eén gebundelde e-mail