CVE-2026-93606 in vm2
الملخص
بحسب VulDB • 18/09/2026
تحتوي إصدارات vm2 (npm) حتى الإصدار 3.12.0 على ثغرة هروب من الصندوق الرملي (sandbox escape) في `VM` و `NodeVM`. عندما يعرّف المُضمّن (embedder) واجهة برمجة تطبيقات للمضيف تُرجع وعداً (Promise) ضمن نطاق المضيف، فإن مُصحح الرفض الخاص بالجسر (bridge's rejection sanitizer)، المتمثل في الدوال `hostPromiseSanitizeReject` / `makeSanitizedPromiseCallback` / `normalizeHostPromiseCallbacks` الموجودة في ملف `lib/bridge.js`، يقوم فقط بتغليف خانات رفض `then`/`catch` التي تحتوي على دالة. كما أن تعادل `Symbol.species`/.then` من جانب الصندوق الرملي يُثبّت فقط على الكائن الجوهري للصندوق الرملي `Promise.prototype`، وبالتالي لا ينطبق أبداً على وعد المضيف (host Promise). يمكن للكود الذي يعمل داخل الصندوق الرملي تجاوز خاصية `p.constructor[Symbol.species]` في وعد المضيف، ثم استدعاء `p.then()` دون معالج رفض (`onRejected`)؛ عندها يحل V8 محلها بـ Thrower الداخلي الخاص به، مما يعيد رمي قيمة الرفض الخام (raw host rejection value) داخل إغلاق resolve/reject الذي التقطه المهاجم. يؤدي هذا إلى توفير وكيل جسر غير مُصحح ومكتمل الوظائف للكائن المضيف للرموز الموجودة في الصندوق الرملي، متجاوزاً دالتي `handleException` و `hostPromiseSanitizeReject`. إذا كانت قيمة الرفض قابلة للتحوّل نحو كائن مضيف (مثل كائن `process`)، فإن ذلك يؤدي إلى تنفيذ عشوائي للأوامر على المضيف. تم الإصلاح في الإصدار 3.12.1.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.