
CVE-2026-2766، لكن مع wasm
الحالة: PoC انهيار مُتحقَّق منه مع اختطاف تدفق التحكم المُثبَت
(انهيار pc = سم الخلية المُحرَّرة 0xcdcdcdcdcdcdcdcd تحت صدفة
التصحيح — يقفز المحرك إلى مؤشر مقروء من ICScript المُحرَّر).
العمل المتبقي: التحكم في البايتات المُستعادة. انظر
research/README.md.
سلسلة من عائلة WasmBlazeFox على خطأ من 2026: CVE-2026-2766، "خطأ ترجمة JIT / استخدام-بعد-التحرير في محرك JavaScript: مكوّن JIT"، المُصلَّح في Firefox 148 (MFSA 2026-13). النهاية هي نفسها كما في CVE-2024-29943-but-with-wasm: تحويل البدائية إلى التحكم في مؤشر كود، وتوجيهه نحو صفحة WASM JIT المليئة بثوابت shellcode.
من تعليقات اختبار الانحدار الخاصة بـ Mozilla (bug 2013583، الاختبار أُضيف في
hg 457b68097f81) وICScript Lifetimes SMDOC في js/src/jit/JitScript.h:
removeInlinedChild → تتم إزالة الخاص بالابن من
لكنه لا يزال مُشارًا إليه بواسطة متجه
الخاص بـ — والأخطر، بواسطة
stub القديم الذي لا يزال موجودًا في سلسلة IC الخاصة بالمُستدعي.ICScriptinlinedChildren_inlinedScripts_InliningRootCallInlinedFunctiongczeal(14, 1)، أي ZealCompactValue عند كل
تخصيص) بنقل/إخلاء ICScript اليتيم بينما تحتفظ سلسلة الـ stub القديمة
بالعنوان القديم.0xe5، مما يعطي انهيارًا واضحًا جدًا.الإصدار المُعرَّض: mozilla-central rev b3663be61a1a (ليلة 2026-01-15؛
الإصلاح وقع بين 2026-01-15 و2026-02-09 — ليلة 09-فبراير تنجو). الصدفة: Taskcluster linux64-fuzzing-asan-opt jsshell لتلك
المراجعة (مطلوب لـ gczeal؛ صدفات release-opt تفتقر إليه).
./js --ion-warmup-threshold=100000 poc.js
== ERROR: AddressSanitizer: SEGV on unknown address 0xe5e5e5e5e5e5e5e5
The signal is caused by a READ memory access.
#0-#3 <unknown module> <- baseline JIT code
#4 EnterJit / MaybeEnterJit <- js/src/jit/Jit.cpp
#10 js::jit::DoCallFallback <- BaselineIC.cpp (the stale IC chain)
rdi = 0xe5e5e5e5e5e5e5e5 <- the freed ICScript
يحدث إلغاء الإشارة في كود baseline JIT أثناء سيره في سلسلة الـ stub القديمة: التحكم في الخلية المُستعادة = التحكم في حقول ICEntry/stub التي يثق بها baseline، بما في ذلك مؤشر كود الـ stub الذي يقفز إليه.
orphaned ICScript (this PoC)
-> compacting GC moves it; stale chain keeps old address
-> reclaim the old cell with controlled bytes (size-class spray)
-> baseline reads fake ICEntry -> fake ICStub -> fake code_ pointer
-> jump into the WASM JIT page shellcode (f64.const immediates,
FuncExport entry-offset overwrite — see the 2024-29943 repo)
انظر research/README.md لسجل
التسليح الكامل. ملخص الوضع الحالي:
TrailingArray) —
قابل للاستعادة بالرش من حيث المبدأ باستخدام مخازن مؤقتة مصنَّفة بالحجم.new Ctor(flag) النهائي، دون نقطة استدعاء JS بينهما؛ الرش الساذج إما يفوّت
النافذة (reclaim1/2) أو يبدّد حالة IC بعاصفة GC zeal
(reclaim3). السلسلة القديمة تنجو من gc() عادي واحد
(purge_check).مرحلة WASM نفسها مبنية ومُثبَتة بالفعل في CVE-2024-29943-but-with-wasm؛ فقط إزاحات نموذج الكائنات تحتاج إلى إعادة اشتقاق لهذا الإصدار من عصر FF149.
poc.js — اختبار الانحدار الخاص بـ Mozilla (bug 2013583)، مُتحقَّق من انهياره
لـ ASAN jsshell بتاريخ 2026-01-15 كما هو موضح أعلاه.457b68097f81