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

التكرار الأول للسلسلة هو الذي يمكن رؤيته في 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:
partial_packets unordered_map. تم اكتشاف هذا باستخدام map_experiment

