
Ein vollständig öffentlicher Exploit der CVE-2020-0022 BlueFrag Android-RCE-Sicherheitslücke (getestet auf Pixel 3 XL)
Vielen Dank an Insinuator für ihren fantastischen Blogbeitrag und Code!
Alle im Insinuator-Beitrag genannten Schritte wurden abgeschlossen, und weitere sind hinzugekommen. Da dies sehr viele Schritte für eine README.md-Datei sind, wirf gerne einen Blick auf den Beitrag von Insinuator, der oben erwähnt wurde.
Der Exploit ist vollständig bis zu dem Punkt, an dem:
Dieser Exploit unterscheidet sich in folgenden Punkten von der Insinuator-Implementierung:
libandroid_runtime.so statt aus libicuuc.so, weil das auf diesem Telefon/Ziel besser funktionierteexecv aufruft, und eine, die zuerst fork und dann execv aufruftlibandroid_runtime.so verarbeitet und die Offsets von Funktionen und Gadgets extrahiert (um die Portierung des Exploits auf andere Ziele zu erleichtern)Dies ist eine Videodemo, die zeigt, wie der Exploit den PC auf eine benutzerdefinierte Adresse umsetzt:

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

Die zweite Iteration der Kette ist diejenige, die zuerst fork und dann execv aufruft. Vollständige Details dieser Kette finden sich hier. Dies passiert bei Verwendung dieser Kette:

Zum Glück verfügt das Pixel 3 XL über Schutzmechanismen, die verhindern, dass der Bluetooth-Prozess fork und/oder execv aufrufen kann. Was Wissensaustausch oder das Zeigen von Können betrifft, ist meine Arbeit hier getan. Wenn ich etwas Fortgeschritteneres schreibe und teile, könnte das für Black-Hats zu hilfreich sein.
Ich betrachte diesen Exploit als vollständig. Zukünftige Verbesserungen könnten sein:
dlsym und dann mprotect aufruft, um eigenen Shellcode auszuführenAll diese Dinge verwandeln dieses Projekt von einem unterhaltsamen Wissensaustausch-Projekt in einen Black-Hat-Exploit, der zur Waffe gemacht werden kann. Daher endet meine Reise hier, vorerst.... Wenn du Fragen hast, melde dich gerne bei mir.
Um den Exploit auszuführen, führe einfach Folgendes 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 übrigen Build-Ziele nur hilfreich, wenn du versuchst, den Exploit zu modifizieren, zu verbessern oder neu zu implementieren. Es besteht also keine Notwendigkeit, sie im Detail zu erwähnen.
gdbserver-Binärdatei befindet sich im NDK-Ordner# Auf dem Zielgerät
/data/local/tmp/gdbserver 0.0.0.0:1234 --attach $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
# Auf dem Host
adb forward tcp:1234 tcp:1234
gdb-multiarch -q -x ./gdbinit
# Auf dem Host
adb push ./gdbinit /data/local/tmp/gdbinit
# Auf dem Zielgerät
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}')
# ODER
/data/data/com.termux/files/usr/bin/gdb -q -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
Du kannst den Bluetooth-Dienst auf dem Angreifer-Rechner 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 mithilfe des map_experiment herausgefunden

