
Bad Spin: Android Binder Privilegienerhöhungs-Exploit (CVE-2022-20421)
Autor: Moshe Kol
Privilege-Escalation-Exploit von unstrusted_app für die Android-Binder-Sicherheitslücke (CVE-2022-20421). Die Sicherheitslücke wurde im Android Security Bulletin vom Oktober 2022 gepatcht. Der Exploit funktioniert auf Geräten mit Kernel-Versionen 5.4.x und 5.10.x und ermöglicht vollständige Kernel-Lese-/Schreib-Primitive. Für das Google Pixel 6 erreicht er zudem vollständigen Root-Zugriff und umgeht SELinux.
Die vollständige Analyse finden Sie hier.
libbadspin.so, indem Sie im Verzeichnis src/ den Befehl make push ausführen. Dadurch wird die Bibliothek auch nach /data/local/tmp übertragen.adb shell aus.LD_PRELOAD=/data/local/tmp/libbadspin.so sleep 1 aus. Dadurch wird die Bibliothek geladen und der Exploit gestartet.libbadspin.so, indem Sie im Verzeichnis src/ den Befehl make push ausführen. Dadurch wird die Bibliothek in das Verzeichnis assets der Android-Demo-App kopiert.app/. (Dazu benötigen Sie möglicherweise Android Studio.)adb logcat -s BADSPINSie können die folgenden Variablen an make übergeben:
VERBOSE=1 für ausführlichere Ausgabe.TEST_VULN=1 zum Testen der Sicherheitslücke, ohne den Exploit auszuführen.$ make list
0: Samsung Galaxy S22, Android 12 (6/2022), kernel 5.10.81
1: Samsung Galaxy S21 Ultra, Android 12 (3/2022), kernel 5.4.129
2: Google Pixel 6, Android 12 (5/2022), kernel 5.10.66
3: Google Pixel 6, Android 13 (9/2022), kernel 5.10.107
Es ist nicht schwierig, den Exploit anzupassen und ein neues Gerät zu unterstützen.
Stellen Sie sicher, dass Ihr neues Gerät mit Kernel-Version 5.4.x oder 5.10.x läuft und der Android-Sicherheitspatch-Level unter Oktober 2022 liegt.
Fügen Sie Ihre Geräteeigenschaften in dev_config.h hinzu.
Geben Sie zwei Funktionszeiger an:
kimg_to_lm(): Wandelt einen virtuellen Zeiger des Kernel-Images in die lineare Abbildung um.find_kbase(): Findet die Kernel-Basisadresse aus einem offengelegten Zeiger von anon_pipe_buf_ops.Sie können die bereits bereitgestellten Funktionen dafür verwenden. (Wenn Ihr Hersteller nicht Samsung ist und Sie sich unsicher sind, verwenden Sie dieselben Funktionen wie für das Pixel 6.)
Kompilieren und ausführen.
Wenn es bei Ihnen funktioniert, reichen Sie bitte einen Pull-Request ein.