
سلسلة استغلال كاملة (CVE-2019-11708 & CVE-2019-9810) ضد متصفح Firefox على ويندوز 64 بت.
هذه سلسلة استغلال كاملة للمتصفح (CVE-2019-11708 و CVE-2019-9810) تستهدف Firefox على Windows 64-bit. تستخدم CVE-2019-9810 للحصول على تنفيذ كود في كل من عملية المحتوى وعملية الأصل، و CVE-2019-11708 لخداع عملية الأصل للتصفح إلى URL عشوائي.

لقد قمت بتغطية السبب الجذري واستغلال CVE-2019-9810 سابقًا في مقال A journey into IonMonkey: root-causing CVE-2019-9810 وفي مستودع github المرتبط.
تم إصلاح CVE-2019-11708 بواسطة النشرة mfsa2019-19 وتم تعيينها Bug 1559858 في متتبع أخطاء Mozilla. إليك ملخص المشكلة:
عدم كفاية التدقيق للمعلمات المُرسلة مع رسالة IPC Prompt:Open بين العمليات
الفرعية والأصلية يمكن أن يؤدي إلى فتح عملية الأصل غير المحصنة لمحتوى ويب
يختاره عملية فرعية مخترقة. عند دمجها مع ثغرات إضافية، قد يؤدي ذلك إلى
تنفيذ كود عشوائي على جهاز المستخدم.
يمكنك العثور على الالتزام الذي يعالج المشكلة هنا: Clean up prompt open calls in Prompter.jsm.
سيتم وصف كتابة كاملة للمشكلة بالإضافة إلى التقنيات المستخدمة في الاستغلال في مقال قادم على doar-e.github.io.
تم اختبار الاستغلال ضد Windows 19H2 64-bit ويستهدف بناءً مخصصًا لـ Firefox، لذا لا تتفاجأ إذا تطلب الأمر بعض العمل لجعله يعمل في مكان آخر :). ومع ذلك، إذا كنت ترغب فقط في تشغيل الاستغلال دون تجميع أي شيء، فقد أعددت متصفحًا محزمًا قمت برفعه في release/firefox-68.0a1.en-US.win64.7z. يتضمن أيضًا صدفة js.exe بالإضافة إلى معلومات الرموز الخاصة لـ js.exe و firefox.exe و xul.dll.
يفترض الاستغلال أن دعم BigInt مفعل في Firefox، ويمكنك فعل ذلك عن طريق تبديل javascript.options.bigint في about:config.

تستخدم عملية الاستغلال تلف البيانات للحصول على تنفيذ JS مميز يُعرف باسم God Mode (وهو في الأساس تطبيق لتقنية مستخدمة في Pwn2Own2014 بواسطة Jüri Aedla) وهو مختلف جدًا (وأكثر ملاءمة) عن الطريقة التي استغليت بها CVE-2019-9810. هذا يعني أنه لا يوجد اختطاف لتدفق التحكم أثناء سلسلة الاستغلال.
Services.mm.loadFrameScript) بدلاً من الخطافات القذرة وغير النظيفة.في الواقع، هناك الكثير من التفاصيل الدقيقة غير الموصوفة أعلاه، لذا إذا كنت مهتمًا، فأنت مدعو للبحث عن الحقيقة وقراءة المصادر / المقال المستقبلي :).
تحديث 13 يونيو 2020: وفقًا لـ @rtfingc / Issue #1، قامت Mozilla بالتخفيف من تلف البيانات المُقدم في هذا الاستغلال بواسطة التزام من 10 فبراير 2020: Bug 1602485.
لبناء الحمولة، كل ما عليك فعله هو تشغيل nmake من موجه VS 2017 x64.
CVE-2019-11708\payload>nmake
Microsoft (R) Program Maintenance Utility Version 14.16.27034.0
Copyright (C) Microsoft Corporation. All rights reserved.
taskkill /f /im payload.exe
ERROR: The process "payload.exe" not found.
if not exist .\bin mkdir bin
python src\genheaders.py sprites
cl /O1 /nologo /ZI /W3 /D_AMD64_ /DWIN_X64 /sdl /Febin\payload.exe src\payload.cc /link /nologo /debug:full user32.lib
payload.cc
del *.obj *.pdb *.idb
if exist .\bin del bin\*.exp bin\*.ilk bin\*.lib
start .\bin\payload.exe
ينشئ هذا ملف payload.exe / payload.pdb داخل دليل payload\bin.
كتبت هذا الاستغلال ضد بناء محلي لنظام Windows متزامن مع معرف المراجعة التالي: 2abb636ad481768b7c88619080cf224b2c266b2d (إذا كنت لا ترغب في بنائه بنفسك، فقد قمت برفع بنائي هنا: release/firefox-68.0a1.en-US.win64.7z):
$ hg --debug id -i
2abb636ad481768b7c88619080cf224b2c266b2d
وقد استخدمت ملف mozconfig التالي:
. "$topsrcdir/browser/config/mozconfigs/win64/common-win64"
ac_add_options --disable-crashreporter
ac_add_options --enable-debug-symbols
. "$topsrcdir/build/mozconfig.clang-cl"
. "$topsrcdir/build/mozconfig.lld-link"
# Use the clang version in .mozbuild
CLANG_LIB_DIR="$(cd ~/.mozbuild/clang/lib/clang/*/lib/windows && pwd)"
export LIB=$LIB:$CLANG_LIB_DIR
ac_add_options --enable-js-shell
ac_add_options --enable-jitspew
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff64