Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-2796-escape-wasm-by-using-wasm — سلسلة استغلال PoC لثغرة CVE-2026-2796: الهروب من بيئة عزل WebAssembly في SpiderMonkey (التباس نوع التوقيع -> قراءة/كتابة اعتباطية -> RCE) | Kitploit
أدوات/GitHubGitHub/sneakynachos/cve-2026-2796-escape-wasm-by-using-wasm
تحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةأمن الويباستغلال الملفات الثنائية
GitHubsneakynachos/cve-2026-2796-escape-wasm-by-using-wasm

CVE-2026-2796-escape-wasm-by-using-wasm

سلسلة استغلال PoC لثغرة CVE-2026-2796: الهروب من بيئة عزل WebAssembly في SpiderMonkey (التباس نوع التوقيع -> قراءة/كتابة اعتباطية -> RCE)

عرض المستودع
51منذ 4 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-2796 — الهروب من بيئة عزل WebAssembly في SpiderMonkey

سلسلة استغلال لإثبات المفهوم (PoC) للثغرة CVE-2026-2796، وهي سوء توليد لكود JIT / خلط أنواع (type confusion) في تحسين استيراد WebAssembly بمحرك Mozilla SpiderMonkey (مكوّن «JavaScript: WebAssembly»). وحدة wasm مصمّمة بعناية تمنح قراءة/كتابة عشوائية لكامل عملية المضيف وتنفيذ كود أصلي عشوائي، محققةً الهروب من بيئة عزل WebAssembly.

  • CVE: CVE-2026-2796 (CWE-843، خلط الأنواع)
  • الإصدارات المتأثرة: Firefox < 148، Thunderbird < 148 (والتطبيقات التي تضمّن المحرك نفسه)
  • أُصلحت في: Firefox 148 / Thunderbird 148، 2026-02-24
  • الخطأ الأصلي (Upstream): Mozilla Bug 2013165 (MFSA-2026-13)
  • كوميت الإصلاح: e2acef67 ("Bug 2013165 - Fix import optimization")

السبب الجذري

عندما تستورد وحدة wasm دالة JavaScript، يطبّق SpiderMonkey تحسينًا في MaybeOptimizeFunctionCallBind (js/src/wasm/WasmInstance.cpp) يفكّك غلاف الاستيرادات من الصيغة Function.prototype.call.bind(fn) ويخزّن fn مباشرةً بوصفه القابل للاستدعاء (callable) الخاص بالاستيراد. غير أنه لم يتحقق مما إذا كانت القيمة المرتبطة نفسها :

دالة مُصدَّرة من wasm
root@kitploit:~
+  if (boundThis.toObject().is<JSFunction>() &&
+      boundThis.toObject().as<JSFunction>().isWasm()) {
+    return nullptr;
+  }

ومع غياب هذا الفحص، يُعامَل الاستيراد باعتباره دالة wasm أصلية: يُتخطَّى غلاف JavaScript — ومعه فحص التوقيع —. وبالتالي يمكن استدعاء دالة wasm عبر نوع استيراد مُعلَن لا يطابق نوعها الحقيقي. تمر القيم عبر المسجّلات دون تغيير؛ فقط تفسيرها هو الذي يتغيّر (مثلًا، يُستخدم i64 يتحكم به المهاجم كمؤشر GC من النوع (ref $t)، والعكس بالعكس).

سلسلة الاستغلال (poc/)

الملفالمرحلةالنتيجة
poc-crash.jsخلط التوقيعi64.const 0xDEADBEEF يُفكَّك مرجعه كمؤشر funcref → SIGSEGV عند 0xdeadbf2f
poc-addrof.jsaddrOf + fakeobjخلط في الاتجاهين (i64 ↔ (ref $t)) → WasmArrayObject مزيف (numElements_ عند +16، data_ عند +24، عناصر مضمّنة عند +40) → قراءة/كتابة عشوائية في أي مكان بالعملية
poc-recon.jsاستطلاع التخطيطمؤشر JSFunction الأصلي عند +0x20 → تسريب قاعدة الثنائي؛ مؤشر typeDef لكائن WasmFuncRef عند +0x40
poc-forge.jsتدفق التحكمfuncref مزوّر يجتاز فحص نوع call_ref؛ يُحمَّل هدف الاستدعاء من [funcref+0x38]
poc-rce.jsتنفيذ الكودfuncref مزوّر → system("touch /tmp/CVE-2026-2796-PWNED") عبر system() المسرَّبة (قاعدة الثنائي + إدخال GOT عند base+0x11d47b0)

تُحصَل بدائية الخلط (confusion primitive) تمامًا كما في اختبار الانحدار الخاص بـ Mozilla نفسه (js/src/jit-test/tests/wasm/regress/bug2013165.js): استيراد Function.prototype.call.bind(wasmExport) في وحدة ثانية يحمل إعلان استيرادها توقيعًا مختلفًا، ثم استخدام ref.func + call_ref.

بناء الصدفة الهشّة

root@kitploit:~
# Firefox source @ 2fbc0748c460b38fc95407a3f14c41d12fb12026 (2026-01-14,
# Firefox 148 nightly — predates the fix). Any pre-148 revision works.
cd js/src
../../configure --enable-debug --enable-optimize --without-intl-api \
  --enable-project=js   # objdir e.g. js/src/_obj
cd _obj && make -j8
# binary: dist/bin/js   (reports "JavaScript-C149.0a1")

التشغيل

root@kitploit:~
JS=/path/to/dist/bin/js
$JS poc/poc-crash.js     # SIGSEGV at 0xdeadbf2f
$JS poc/poc-addrof.js    # prints [+] arbitrary read OK / write OK
$JS poc/poc-recon.js     # dumps JSFunction / WasmFuncRef memory
$JS poc/poc-forge.js     # crashes with PC = planted canary
rm -f /tmp/CVE-2026-2796-PWNED
$JS poc/poc-rce.js       # creates /tmp/CVE-2026-2796-PWNED via system()

على بناء مُرقَّع (Firefox ≥ 148)، يرمي poc-crash.js بدلًا من ذلك الخطأ TypeError: bad type — أي أن فحص التوقيع أصبح مُستعادًا.

ملاحظات قابلية النقل

الإزاحات مخصّصة لـ macOS arm64 (صدفة js، بنفس هذه المراجعة وخيارات البناء بالضبط): WasmArrayObject { +16 numElements، +24 data_، +40 بيانات مضمّنة }، JSFunction الأصلي عند +0x20، وWasmFuncRef { +0x40 typeDef، +0x38 هدف الاستدعاء }. وهي مُتحقَّق منها تجريبيًا وقت التشغيل عبر الاختبارات الذاتية لسلاسل الاستغلال (PoCs)؛ أما البنيات/المعماريات الأخرى فتتطلب اشتقاقًا جديدًا (يؤتمت PoC الاستطلاعي معظم ذلك). لا يوجد PAC على ثنائيات arm64 (غير arm64e)؛ مناطق JIT غير قابلة للكتابة وقت الاستدعاء، لذلك تختطف السلسلة هدف استدعاء موجودًا بدلًا من حقن الكود.

السلسلة الكاملة: الهروب من بيئة العزل

انظر docs/full-escape.md لتحليل المرحلة الثانية: الهروب من بيئة عزل نظام التشغيل انطلاقًا من تنفيذ كود في عملية العرض عبر CVE-2026-2768 (Bug 2014101، كتابة خارج الحدود OOB في IndexedDB داخل عملية الأب) — «الثغرة الثانية» في اختراق كامل لمتصفح Firefox. الشجرة الهشّة المستخدمة هنا تسبق هذا الإصلاح أيضًا.

النطاق / القيود بصراحة

تُتيح هذه السلسلة الهروب من بيئة عزل محرك wasm (حصر الذاكرة الخطية / أداة جمع القمامة GC) وتُنتج تنفيذ كود أصلي داخل العملية الحالية. في هجوم متصفح حقيقي، يقع هذا التنفيذ داخل عملية المحتوى في Firefox؛ أما الهروب من بيئة عزل نظام التشغيل («الثغرة الثانية»: خلط في IPC أو استغلال للنواة) فهو مشكلة منفصلة وليست جزءًا من هذا الـ PoC.

التخفيفات

  • حدِّث إلى Firefox / Thunderbird ≥ 148.
  • دفاعٌ في العمق: javascript.options.wasm=false يحجب ناقل الاستغلال.

المراجع

  • MFSA-2026-13
  • NVD: CVE-2026-2796
  • الإصلاح: https://github.com/mozilla-firefox/firefox/commit/e2acef6711967949cd0825869034165383c482e1
  • الاختبارات: https://github.com/mozilla-firefox/firefox/commit/0605ac40b002d576688190a5b9921b8dcd1b6b96

إخلاء المسؤولية

لأغراض البحث الأمني والتعليم والاختبار الدفاعي فقط. الثغرة مُصلَحة في إصدارات Firefox/Thunderbird الحالية. لا تستخدمها ضد أنظمة لا تملكها أو ليس لديك تفويض صريح لاختبارها.

تنزيل الأداة