
Un exploit completamente público de la vulnerabilidad CVE-2020-0022 BlueFrag Android RCE (probado en Pixel 3 XL)
Muchas gracias a Insinuator por su increíble publicación y código!
Todos los pasos mencionados en la publicación de Insinuator se han completado, y más. Son muchos pasos para incluir en un archivo README.md, así que siéntase libre de consultar la publicación de Insinuator mencionada anteriormente.
El exploit está completamente terminado hasta el punto donde:
Este exploit difiere de la implementación de Insinuator en los siguientes aspectos:
libandroid_runtime.so en lugar de libicuuc.so, porque funcionó mejor en este teléfono/objetivoexecv directamente y otra que llama a fork y luego execvlibandroid_runtime.so y extrae los offsets de funciones y gadgets (para facilitar el porteo del exploit a otros objetivos)Este es un video demo que muestra el exploit modificando el PC para apuntar a una dirección personalizada:

La primera iteración de la cadena es la que se puede ver en jop_experiment. Esta cadena llama a execv directamente sin llamar a fork. Se puede encontrar en el commit ca28fdf Esto es lo que ocurre al usar esta cadena:

La segunda iteración de la cadena es la que llama a fork y luego execv. Los detalles completos de esta cadena se pueden encontrar aquí. Esto es lo que ocurre al usar esta cadena:

Afortunadamente, el Pixel 3 XL tiene protecciones que impiden que el proceso de bluetooth llame a fork y/o execv. En términos de compartir conocimiento o lucirse, mi trabajo aquí está hecho. Si escribo y comparto algo más avanzado, podría ser demasiado útil para los black-hats.
Considero que este exploit está completo. Las mejoras futuras podrían ser:
dlsym y luego mprotect para ejecutar shellcode personalizadoTodas estas cosas convierten este proyecto de un proyecto divertido de compartir conocimiento a un exploit black-hat que puede ser convertido en arma, así que aquí termina mi viaje, por ahora.... Si tiene alguna pregunta, no dude en contactarme.
Para ejecutar el exploit, simplemente ejecute:
make build run ARGS="00:00:00:00:00:00"
Donde 00:00:00:00:00:00 es la dirección MAC del dispositivo objetivo/víctima. Aparte de make clean, el resto de los objetivos de compilación solo son útiles si está intentando modificar, mejorar o reimplementar el exploit, por lo que no es necesario mencionarlos en profundidad.
gdbserver de Android se puede encontrar en la carpeta NDK# En el objetivo
/data/local/tmp/gdbserver 0.0.0.0:1234 --attach $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
# En el host
adb forward tcp:1234 tcp:1234
gdb-multiarch -q -x ./gdbinit
# En el host
adb push ./gdbinit /data/local/tmp/gdbinit
# En el objetivo
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}')
# O
/data/data/com.termux/files/usr/bin/gdb -q -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
Puede reiniciar el servicio bluetooth en la máquina atacante en caso de que deje de funcionar:
sudo systemctl restart bluetooth.service
Esta sección explica algunos de los fenómenos que se observaron durante el desarrollo de este exploit:

base::MessageLoop utilizado a través de get_message_loop:
unordered_map de partial_packets. Esto se averiguó usando el map_experiment

