
A fully public exploit of the CVE-2020-0022 BlueFrag Android RCE Vulnerability (tested on Pixel 3 XL)
Un grand merci à Insinuator pour leur article de blog et code incroyable!
Toutes les étapes mentionnées dans l'article d'Insinuator ont été réalisées, et bien plus. Ces étapes sont nombreuses à mettre dans un fichier README.md, donc n'hésitez pas à consulter l'article d'Insinuator mentionné ci-dessus.
L'exploit est entièrement complet jusqu'au point où :
Cet exploit diffère de l'implémentation d'Insinuator de la manière suivante :
libandroid_runtime.so plutôt que dans libicuuc.so, car cela fonctionnait mieux sur ce téléphone/cibleexecv directement et une qui appelle fork puis execvlibandroid_runtime.so et extrait les décalages des fonctions et gadgets (pour faciliter le portage de l'exploit vers d'autres cibles)Voici une démonstration vidéo montrant l'exploit modifiant le PC pour pointer vers une adresse personnalisée :

La première itération de la chaîne est celle que l'on peut voir dans jop_experiment. Cette chaîne appelle execv directement sans appeler fork. Elle peut être trouvée dans le commit ca28fdf Voici ce qui se produit en utilisant cette chaîne :

La deuxième itération de la chaîne est celle qui appelle fork puis execv. Les détails complets de cette chaîne peuvent être trouvés ici. Voici ce qui se produit en utilisant cette chaîne :

Heureusement, le Pixel 3 XL dispose de protections qui empêchent le processus bluetooth d'appeler fork et/ou execv. En termes de partage de connaissances ou de démonstration, mon travail ici est terminé. Si j'écris et partage quelque chose de plus avancé, cela pourrait être trop utile pour les hackers malveillants.
Je considère cet exploit comme complet. Les améliorations futures pourraient être :
dlsym puis mprotect afin d'exécuter un shellcode personnaliséToutes ces choses transforment ce projet d'un projet amusant de partage de connaissances en un exploit black-hat qui peut être utilisé comme arme, donc c'est là que mon voyage s'arrête, pour l'instant.... Si vous avez des questions, n'hésitez pas à me contacter.
Pour exécuter l'exploit, lancez simplement :
make build run ARGS="00:00:00:00:00:00"
Où 00:00:00:00:00:00 est l'adresse MAC de l'appareil cible/victime. En dehors de make clean, les autres cibles de construction ne sont utiles que si vous essayez de modifier, améliorer ou réimplémenter l'exploit, il n'est donc pas nécessaire de les mentionner en détail.
gdbserver Android peut être trouvé dans le dossier 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}')
Vous pouvez redémarrer le service bluetooth sur la machine attaquante s'il cesse de fonctionner :
sudo systemctl restart bluetooth.service
Cette section explique certains des phénomènes observés lors du développement de cet exploit :

base::MessageLoop utilisé via get_message_loop :
unordered_map partial_packets. Cela a été découvert en utilisant map_experiment

