
CVE-2026-6765، معالجات FormAutofill المكشوفة في Firefox للاختبار فقط
المُبلِّغ مُوثَّق من قِبل Mozilla في MFSA 2026-30: عبدالعزيز السايقah. يحتوي هذا الدليل على أداة إعادة إنتاج حقيقية للثغرة. وهي مُصمَّمة ليتم تشغيلها ضد نسخة Firefox مُعرَّضة للثغرة مُنزَّلة محليًا. ولا تلمس أبدًا أي نظام حي أو تابع لجهة خارجية.
مستودع PoC المطابق: https://github.com/defineid/SkeletonKey
الشرح المكتوب: writeup-ff-autofill.html في هذه المحفظة.
| الحقل | القيمة | المصدر |
|---|---|---|
| CVE | CVE-2026-6765 | MITRE cvelistV5 (الحالة PUBLISHED، CNA Mozilla) |
| العنوان | Information disclosure in the Form Autofill component | NVD · MFSA 2026-30 |
| الخطورة | متوسطة · CVSS 5.3 · AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N | NVD |
| CWE | 359 · Exposure of Private Information | NVD |
| تم الإصلاح في | Firefox 150 · Firefox ESR 140.10 · Thunderbird 150 / 140.10 | MFSA 2026-30 |
| الخطأ | bugzilla.mozilla.org/show_bug.cgi?id=2022419 (مُقيَّد أمنيًا) | مرجع NVD |
| المُبلِّغ | عبدالعزيز السايقah | MFSA 2026-30 |
يتبادل زوج FormAutofill JSWindowActor (FormAutofillChild في المحتوى و
FormAutofillParent في العملية الأصلية) الرسائل. في
mozilla-central الحالي، يُقيِّد FormAutofillParent.receiveMessage أي شيء خارج
مجموعة المسموح به خلف فحص الأتمتة:
// toolkit/components/formautofill/FormAutofillParent.sys.mjs (fixed tree)
if (!FORM_AUTOFILL_MESSAGES.has(name) && !Cu.isInAutomation) {
return undefined;
}
يشير تعليق المصدر إلى أن معالجات Save وRemove تُستدعى فقط بواسطة الاختبارات:
FormAutofill:SaveAddressFormAutofill:SaveCreditCardFormAutofill:RemoveAddressesFormAutofill:RemoveCreditCardsفي الإصدارات المتأثرة، كانت تلك المعالجات المخصّصة للاختبارات فقط قابلة للوصول دون
بوابة Cu.isInAutomation، لذا كان بإمكان سياق محتوى الوصول إلى مسارات FormAutofill
التي لم تُصمَّم قط لمواجهة محتوى الويب. صنّفت Mozilla التعرّض الناتج
على أنه إفصاح عن معلومات بيانات التعبئة التلقائية المخزّنة.
ملاحظة حول نطاق الوصول: تقع getActor على windowGlobalChild، وهي خاصية
خاصة بـ chrome فقط. لا يراها سكربت الصفحة العادي أبدًا، لذا فإن نموذج التهديد هو عملية محتوى
يؤثر عليها المهاجم بالفعل (اختراق المُصيِّر أو مسار شيفرة
على جانب المحتوى) تُصدر رسالة actor، وليس صفحة ويب عادية. تحاول أداة الاختبار
مسار المحتوى وتُبلّغ بصدق عمّا إذا كان الأب قد استجاب أو أن الحدود
صمدت.
يوجد العنصر الأساسي الدقيق للإفصاح في bug 2022419 وهو مقيّد أمنيًا. توضّح أداة الاختبار هذه إمكانية الوصول إلى معالج مخصّص للاختبارات فقط يحجبه إصدار مُصلَح. مرّر الاستدعاء الدقيق الذي استخدمه تقريرك مع
--message.
عملية محتوى يؤثر عليها المهاجم بالفعل (اختراق المُصيِّر أو مسار شيفرة على جانب المحتوى) ترسل رسالة FormAutofill actor التي ينبغي أن تصدر فقط من أداة اختبار الاختبارات. في الإصدار المعرّض للثغرة يستجيب الأب. في الإصدار المُصلَح تُسقطها بوابة الأتمتة.
https://ftp.mozilla.org/pub/firefox/releases/140.9.0esr/.pip install marionette-driver
ابدأ بناء النسخة القابلة للاستغلال بملف تعريف جديد مع تفعيل Marionette:
/path/to/firefox --marionette --no-remote --profile ./poc-profile about:blank
ثم في about:preferences#privacy أضف عنوانًا محفوظًا اصطناعيًا واحدًا وبطاقة اصطناعية واحدة، على سبيل المثال الاسم POC TESTER، ورقم البطاقة 4111 1111 1111 1111. هذه بيانات اختبار فقط.
python3 poc.py # default handler and 127.0.0.1:2828
python3 poc.py --help # options
python3 poc.py --message FormAutofill:SaveAddress
getActor مخصص لـ chrome فقط، لذا من بيئة المحتوى المعزولة (content sandbox) يُبلّغ أداة الاختبار البسيطة (plain harness) عن تعذّر الوصول إلى الـ actor (انظر poc-run.png). لدفع الرسالة من سياق يمتلك الـ actor فعليًا، على نسخة مُعرّضة للثغرة فعّل صندوق أدوات المتصفح (Browser Toolbox) (devtools.chrome.enabled وdevtools.debugger.remote-enabled)، وافتحه بـ Ctrl+Alt+Shift+I، ومن وحدة تحكم عملية المحتوى (content-process console) اجلب الـ actor من windowGlobalChild واستدعِ sendQuery بنفس الحمولة الاصطناعية. يحاكي هذا نموذج التهديد الخاص بعملية محتوى مخترقة دون أي بيانات حقيقية.
undefined لأن Cu.isInAutomation تساوي false. يُبلّغ السكربت عن فرض البوابة.كُتبت أداة الاختبار هذه استنادًا إلى السجل العام ومصدر mozilla-central الحالي. وقد نُفِّذت هنا مقابل نسخة Firefox 140.11.0esr المحلية، وهي مُصحَّحة بالفعل للثغرة CVE-2026-6765. التشغيل المُلتقط موجود في poc-run.png: من سياق المحتوى لا يمكن الوصول إلى FormAutofill actor (فـ windowGlobalChild.getActor غير مكشوف للمحتوى)، لذا تصمد حدود العملية الأصلية (parent boundary). هذه هي النتيجة الصحيحة والصادقة على نسخة مُصحَّحة.
لملاحظة تجاوز الحدود تحتاج إلى نسخة مُعرّضة للثغرة (Firefox قبل 150 أو ESR قبل 140.10، مثلًا 140.9.0esr) بالإضافة إلى ملف تعريف مؤقت (throwaway profile) مُزوَّد ببيانات autofill اصطناعية، وتدفع رسالة الـ actor من سياق عملية المحتوى وفق بديل صندوق أدوات المتصفح أعلاه. عدّل --message ليطابق البدائي (primitive) الدقيق من تقريرك الأصلي.
يستهدف هذا نسخة مُنزَّلة محليًا مع بيانات اصطناعية لكتابة تقرير عن ثغرة CVE أبلغ عنها المؤلف بنفسه وتم تصحيحها بالفعل. وهو لا يهاجم أي خدمة حية أو تابعة لطرف ثالث.