
استغلال RCE عبر Bluetooth بدون نقر لنظام Android 8-9 (CVE-2020-0022) مع رش الكومة وتسريب العناوين وتنفيذ سلسلة JOP لتنفيذ التعليمات البرمجية عن بُعد عبر ثغرة BlueFrag.
جزيل الشكر لـ Insinuator على مقالتهم المذهلة وكودهم!
تم إنجاز جميع الخطوات المذكورة في مقال Insinuator، والمزيد. وهذه خطوات كثيرة لوضعها في ملف README.md، لذا لا تتردد في الاطلاع على مقال Insinuator المذكور أعلاه.
الاستغلال مكتمل تمامًا حتى النقطة التي:
يختلف هذا الاستغلال عن تنفيذ Insinuator في النواحي التالية:
libandroid_runtime.so بدلاً من libicuuc.so، لأن ذلك عمل بشكل أفضل على هذا الهاتف/الهدفexecv مباشرةً والأخرى تستدعي fork ثم execvlibandroid_runtime.so ويستخرج إزاحات الدوال والأدوات (لتسهيل نقل الاستغلال إلى أهداف أخرى)هذا عرض فيديو يوضح الاستغلال وهو يعدّل PC ليُشير إلى عنوان مخصص:

النسخة الأولى من السلسلة هي تلك التي يمكن رؤيتها في jop_experiment. تستدعي هذه السلسلة execv مباشرةً دون استدعاء fork. ويمكن العثور عليها في commit ca28fdf وهذا ما يحدث عند استخدام هذه السلسلة:

النسخة الثانية من السلسلة هي تلك التي تستدعي fork ثم execv. يمكن العثور على التفاصيل الكاملة لهذه السلسلة هنا. وهذا ما يحدث عند استخدام هذه السلسلة:

لحسن الحظ، يمتلك Pixel 3 XL حمايات تمنع عملية البلوتوث من استدعاء fork و/أو execv. فيما يتعلق بمشاركة المعرفة أو الاستعراض، فقد انتهى عملي هنا. إذا كتبت وشاركت شيئًا أكثر تقدمًا، فقد يكون مفيدًا جدًا لذوي القبعات السوداء.
أعتبر هذا الاستغلال مكتملًا. التحسينات المستقبلية قد تشمل:
dlsym ثم mprotect لتشغيل شيل كود مخصصكل هذه الأمور تحوّل هذا المشروع من مشروع ممتع لمشاركة المعرفة إلى استغلال للقبعات السوداء يمكن تسليحه، لذا فهنا تنتهي رحلتي، في الوقت الحالي.... إذا كانت لديك أي أسئلة، لا تتردد في التواصل معي.
لتشغيل الاستغلال، قم فقط بتشغيل:
make build run ARGS="00:00:00:00:00:00"
حيث 00:00:00:00:00:00 هو عنوان MAC لجهاز الهدف/الضحية. وبخلاف make clean، فإن باقي أهداف البناء مفيدة فقط إذا كنت تحاول تعديل الاستغلال أو تحسينه أو إعادة تنفيذه، لذا لا حاجة لذكرها بالتفصيل.
gdbserver الخاص بنظام أندرويد في مجلد NDK# On target
/data/local/tmp/gdbserver 0.0.0.0:1234 --attach $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
# On host
adb forward tcp:1234 tcp:1234
gdb-multiarch -q -x ./gdbinit
# On host
adb push ./gdbinit /data/local/tmp/gdbinit
# On target
su
/data/data/com.termux/files/usr/bin/gdb -q -x /data/local/tmp/gdbinit -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
# OR
/data/data/com.termux/files/usr/bin/gdb -q -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
يمكنك إعادة تشغيل خدمة البلوتوث على جهاز المهاجم في حال توقفت عن العمل:
sudo systemctl restart bluetooth.service
يشرح هذا القسم بعض الظواهر التي لوحظت أثناء تطوير هذا الاستغلال:

base::MessageLoop المستخدم عبر get_message_loop:
unordered_map الخاص بـ partial_packets. تم اكتشاف ذلك باستخدام map_experiment

