
Zero-Click-Bluetooth-RCE-Exploit für Android 8-9 (CVE-2020-0022) mit Heap-Spraying, Adress-Leaking und JOP-Chain-Ausführung für Remote-Code-Ausführung über die BlueFrag-Schwachstelle.
Vielen Dank an Insinuator für ihren tollen Blogbeitrag und Code!
Alle im Insinuator-Beitrag erwähnten Schritte wurden abgeschlossen und noch mehr. Es sind viele Schritte, um sie in eine README.md-Datei zu packen, also schauen Sie sich gerne den Beitrag von Insinuator oben an.
Der Exploit ist vollständig bis zu dem Punkt abgeschlossen, an dem:
Dieser Exploit unterscheidet sich in folgenden Punkten von Insinuators Implementierung:
libandroid_runtime.so statt libicuuc.so preis, weil das auf diesem Telefon/Ziel besser funktionierteexecv direkt aufruft, und eine, die fork und dann execv aufruftlibandroid_runtime.so-Datei verarbeitet und die Offsets von Funktionen und Gadgets extrahiert (um die Portierung des Exploits auf andere Ziele zu erleichtern)Dies ist eine Video-Demo, die zeigt, wie der Exploit den PC ändert, um auf eine benutzerdefinierte Adresse zu zeigen:

Die erste Iteration der Kette ist die, die im jop_experiment zu sehen ist. Diese Kette ruft execv direkt auf, ohne fork aufzurufen. Sie befindet sich in Commit ca28fdf. Dies geschieht bei Verwendung dieser Kette:

Die zweite Iteration der Kette ruft fork und dann execv auf. Vollständige Details dieser Kette finden Sie hier. Dies geschieht bei Verwendung dieser Kette:

Glücklicherweise verfügt das Pixel 3 XL über Schutzmechanismen, die verhindern, dass der Bluetooth-Prozess fork und/oder execv aufruft. Was Wissensaustausch oder Vorführung betrifft, ist meine Arbeit hier abgeschlossen. Wenn ich etwas Fortgeschritteneres schreibe und teile, könnte es für Black-Hats zu hilfreich sein.
Ich betrachte diesen Exploit als abgeschlossen. Mögliche zukünftige Verbesserungen sind:
dlsym und dann mprotect aufzurufen, um benutzerdefinierten Shellcode auszuführenAll diese Dinge verwandeln dieses Projekt von einem unterhaltsamen Wissensaustausch-Projekt in einen Black-Hat-Exploit, der bewaffnet werden kann, also endet meine Reise hier, vorerst.... Wenn Sie Fragen haben, kontaktieren Sie mich gerne.
Um den Exploit auszuführen, führen Sie einfach aus:
make build run ARGS="00:00:00:00:00:00"
Wobei 00:00:00:00:00:00 die MAC-Adresse des Ziel-/Opfergeräts ist. Abgesehen von make clean sind die restlichen Build-Ziele nur hilfreich, wenn Sie versuchen, den Exploit zu modifizieren, zu verbessern oder neu zu implementieren, daher ist es nicht nötig, sie im Detail zu erwähnen.
gdbserver befindet sich im NDK-Ordner# 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}')
Sie können den Bluetooth-Dienst auf dem Angreiferrechner neu starten, falls er nicht mehr funktioniert:
sudo systemctl restart bluetooth.service
Dieser Abschnitt erklärt einige der Phänomene, die während der Entwicklung dieses Exploits beobachtet wurden:

get_message_loop verwendeten base::MessageLoop-Objekts modifiziert:
partial_packets unordered_map enthalten. Dies wurde mit dem map_experiment herausgefunden

