
Exploit Bluetooth RCE a zero-click per Android 8-9 (CVE-2020-0022) con heap spraying, address leaking ed esecuzione di catena JOP per esecuzione di codice remoto tramite la vulnerabilità BlueFrag.
Molte grazie a Insinuator per il loro fantastico post sul blog e codice!
Tutti i passaggi menzionati nel post di Insinuator sono stati completati, e altri ancora. Sono molti passaggi da inserire in un file README.md, quindi sentiti libero di dare un'occhiata al post di Insinuator menzionato sopra.
L'exploit è completamente completo fino al punto in cui:
Questo exploit differisce dall'implementazione di Insinuator nei seguenti modi:
libandroid_runtime.so invece che in libicuuc.so, perché funzionava meglio su questo telefono/targetexecv direttamente e una che chiama fork e poi execvlibandroid_runtime.so ed estrae gli offset di funzioni e gadget (per facilitare il porting dell'exploit su altri target)Questo è un video demo che mostra l'exploit che modifica il PC per puntare a un indirizzo personalizzato:

La prima iterazione della catena è quella che può essere vista in jop_experiment. Questa catena chiama execv direttamente senza chiamare fork. Può essere trovata nel commit ca28fdf Questo è ciò che accade usando questa catena:

La seconda iterazione della catena è quella che chiama fork e poi execv. I dettagli completi di questa catena si trovano qui. Questo è ciò che accade usando questa catena:

Fortunatamente, Pixel 3 XL ha protezioni che impediscono al processo bluetooth di chiamare fork e/o execv. In termini di condivisione della conoscenza o di esibizione, il mio lavoro qui è fatto. Se scrivessi e condividessi qualcosa di più avanzato, potrebbe essere troppo utile per i black-hat.
Considero questo exploit completo. Miglioramenti futuri potrebbero essere:
dlsym e poi mprotect per eseguire shellcode personalizzatoTutte queste cose trasformano questo progetto da un divertente progetto di condivisione della conoscenza in un exploit black-hat che può essere armato, quindi è qui che il mio viaggio finisce, per ora.... Se hai domande, sentiti libero di contattarmi.
Per eseguire l'exploit, basta eseguire:
make build run ARGS="00:00:00:00:00:00"
Dove 00:00:00:00:00:00 è l'indirizzo MAC del dispositivo target/vittima. Oltre a make clean, gli altri target di build sono utili solo se stai cercando di modificare, migliorare o reimplementare l'exploit, quindi non c'è bisogno di menzionarli in dettaglio.
gdbserver si trova nella cartella 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}')
Puoi riavviare il servizio bluetooth sulla macchina attaccante nel caso smetta di funzionare:
sudo systemctl restart bluetooth.service
Questa sezione spiega alcuni dei fenomeni osservati durante lo sviluppo di questo exploit:

base::MessageLoop usato tramite get_message_loop:
unordered_map partial_packets. Questo è stato scoperto usando map_experiment

