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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/sneakynachos/cve-2024-29943-but-with-wasm
الاستغلالشيل كودأمن الويباستغلال الملفات الثنائية
GitHubsneakynachos/cve-2024-29943-but-with-wasm

CVE-2024-29943-but-with-wasm

CVE-2024-29943، ولكن مع wasm

عرض المستودع

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
114منذ شهر واحدلم تتم المراجعة بعد
مشاركة

CVE-2024-29943، لكن باستخدام wasm

سلسلة استغلال متكاملة لـ CVE-2024-29943 تحقق تنفيذ تعليمات برمجية أصلية عشوائية عبر تهريب shellcode إلى صفحة تعليمات WebAssembly JIT الخاصة بـ SpiderMonkey كقيم فورية f64.const — بدون ROP، بدون VirtualProtect، بدون سلسلة أدوات خارجية.

تم التحقق من عملها مقابل shell الخاص بـ SpiderMonkey من إصدار 2024-03-20 mozilla-central nightly (JavaScript-C126.0a1، linux x86-64، قبل الإصلاح): تكتمل السلسلة حتى النهاية وتُنفَّذ الحمولة (write(1, "PWNED by wasm!\n"); exit(0)).

الثغرة

CVE-2024-29943 هي ثغرة حرجة أمنياً في تحليل النطاق (range-analysis) في IonMonkey استُخدمت في Pwn2Own 2024 من قبل Manfred Paul، وتؤثر على Firefox < 124.0.1 (Bugzilla 1886849، CVSS 9.8).

أعادت MObjectKeysLength::computeRange نطاقاً صحيحياً غير صحيح لـ Object.keys(x).length بعد جعل Object.keys قابلاً للحذف (تراجعت بسبب bug 1845728). استنتج تحليل النطاق في Ion أن عدّاد حلقة لا يمكن أن يصبح سالباً وأزال فحوصات الحدود التي كانت لا تزال قابلة للوصول، مما أدى إلى قراءة/كتابة خارج الحدود على .

Uint8Array

السلسلة

root@kitploit:~
Object.keys range-analysis bug -> OOB r/w on Uint8Array
  -> corrupt adjacent ArrayBuffer -> addrof / fakeobj / arbitrary R/W
    -> instantiate hand-built WASM module (shellcode as f64.const immediates)
      -> WasmInstanceObject -> wasm::Instance -> wasm::Code -> CodeTier
         -> ModuleSegment.bytes_ (the JIT code page, RX)
           -> scan page for marker constant
             -> overwrite FuncExport.eagerInterpEntryOffset_ (plain heap)
                with the shellcode's offset within the page
               -> call the export through the interpreter -> payload runs

تفصيلان كلّفانا segfault لكل واحد منهما لنتعلمهما، لذا هما مدوّنان:

  1. صفحة التعليمات هي RX، وليست RWX. يقوم SpiderMonkey بعمل mprotect لقطاع تعليمات wasm بعد الترجمة؛ فتعديل التعليمات في مكانها يؤدي إلى خطأ. تتم إعادة التوجيه عبر الكتابة فوق eagerInterpEntryOffset_ في FuncExport الموجود في الـ heap بدلاً من ذلك — يحسب المفسّر codeBase + offset ويقفز إلى هناك.
  2. يجب أن يأتي استدعاء التشغيل من المفسّر. التعليمات البرمجية على المستوى الأعلى تكون ساخنة من حلقة تدريب البدائيات وتُترجم بـ Warp، والتي تستدعي صادرات wasm عبر مسار JIT-entry ولا تنظر أبداً إلى إزاحة interp entry. الاستدعاء من دالة باردة يفرض مسار المفسّر.

تقنية shellcode في صفحة WASM-JIT مأخوذة من WasmBlazeFox؛ يوضّح هذا المستودع أن التقنية تتكامل مع ثغرة حديثة في متصفح مُصدَّر فعلياً بدلاً من ثغرة التدريب الأصلية من 2018.

الملفات

  • poc.js — مُشغِّل أدنى لثغرة تحليل النطاق.
  • exploit.js — السلسلة الكاملة: البدائيات + مرحلة shellcode في WASM JIT.
  • gen_wasm.py — يجمّع وحدة WASM التي تُضمّن shellcode ويتحقق من الذهاب والإياب للثابت. python3 gen_wasm.py mysc.bin لاستخدام حمولة مختلفة. الحمولة الافتراضية هي إثبات بنداء نظام خالص write(1, "PWNED by wasm!\n"); exit(0) لا يحتاج إلى حل الرموز (لذا يعمل أيضاً في jsshell المجرّد). للحمولة الكلاسيكية القائمة على libxul system("gnome-calculator")، انظر WasmBlazeFox ex6.
  • test.gdb — نقاط توقف ومساعدات ptype /o لاشتقاق إزاحات نموذج الكائن على بناء معيّن.

إعادة الإنتاج

  1. احصل على shell قابل للاستغلال: ابنِ gecko-dev @ afbdf6822c9e9f9b6d44b9ea6904cb10878126b1 (Firefox ~124، قبل 124.0.1)، Linux x86-64 — أو احصل على jsshell nightly قبل الإصلاح، مثل archive.mozilla.org/pub/firefox/nightly/2024/03/2024-03-20-21-16-35-mozilla-central/jsshell-linux-x86_64.zip.
  2. شغّل:
    root@kitploit:~
    LD_LIBRARY_PATH=<jsshell dir> ./js --no-threads --ion-offthread-compile=off \
        --spectre-mitigations=off poc.js      # trigger only (segfault)
    LD_LIBRARY_PATH=<jsshell dir> ./js --no-threads --ion-offthread-compile=off \
        --spectre-mitigations=off exploit.js  # full chain ("PWNED by wasm!")
    

--spectre-mitigations=off مطلوب لأن إزالة فحص الحدود تعتمد على تعطيل إخفاء الفهرس (انظر تعليقات Bugzilla).

ملاحظات

  • يُستدعى تصدير wasm مرة واحدة بالضبط قبل الاستيلاء لتبقى الدالة في الطبقة الأساسية (baseline tier)، حيث تُصدَر قيم f64.const الفورية مضمّنة في قطاع التعليمات. قد تقوم ترجمة Ion بطيّها كثوابت.
  • الإزاحات (WASM_INSTANCE_OFF_CODE = 0xa8، MetadataTier.funcExports + 448، FuncExport + 8، إلخ) اشتُقّت من ترويسات الالتزام القابل للاستغلال وأُكِّدت مقابل jsshell nightly بتاريخ 2024-03-20؛ أعد اشتقاقها بـ test.gdb لعمليات بناء أخرى.

المراجع

  • https://bugzilla.mozilla.org/show_bug.cgi?id=1886849
  • https://nvd.nist.gov/vuln/detail/CVE-2024-29943
  • https://www.mozilla.org/security/advisories/mfsa2024-15/
  • https://github.com/bjrjk/CVE-2024-29943
  • https://doar-e.github.io/blog/2018/11/19/introduction-to-spidermonkey-exploitation/
تنزيل الأداة