
Bad Spin: Exploit d'escalade de privilèges du Binder Android (CVE-2022-20421)
Auteur : Moshe Kol
Exploit d'élévation de privilèges depuis unstrusted_app pour la vulnérabilité Android Binder (CVE-2022-20421). La vulnérabilité a été corrigée dans le Bulletin de sécurité Android d'octobre 2022. L'exploit fonctionne sur les appareils utilisant les versions de noyau 5.4.x et 5.10.x, et il permet d'obtenir des primitives R/W complètes sur le noyau. Pour le Google Pixel 6, il permet également d'obtenir un accès root complet et de contourner SELinux.
Vous pouvez trouver l'article complet ici.
libbadspin.so en tapant make push dans le répertoire src/. Cette action poussera également la bibliothèque vers /data/local/tmp.adb shell.LD_PRELOAD=/data/local/tmp/libbadspin.so sleep 1. Cela chargera la bibliothèque et démarrera l'exploit.libbadspin.so en tapant make push dans le répertoire src/. Cela copiera la bibliothèque dans le répertoire assets de l'application Android de démonstration.app/. (Vous aurez peut-être besoin d'Android Studio pour cela.)adb logcat -s BADSPINVous pouvez passer les variables suivantes à make :
VERBOSE=1 pour augmenter la verbosité.TEST_VULN=1 pour tester la vulnérabilité sans poursuivre l'exploit.$ 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
Il n'est pas difficile d'adapter l'exploit pour prendre en charge un nouvel appareil.
Assurez-vous que votre nouvel appareil utilise une version de noyau 5.4.x ou 5.10.x et que son niveau de correctif de sécurité Android est antérieur à octobre 2022.
Ajoutez les propriétés de votre appareil à dev_config.h.
Spécifiez deux pointeurs de fonction :
kimg_to_lm() : Convertit un pointeur virtuel d'image du noyau en mappage linéaire.find_kbase() : Trouve l'adresse de base du noyau à partir d'un pointeur divulgué anon_pipe_buf_ops.Vous pouvez utiliser les fonctions déjà fournies pour cela. (Si votre fournisseur n'est pas Samsung et que vous n'êtes pas sûr, utilisez les mêmes fonctions que pour le Pixel 6.)
Compilez et exécutez.
Si cela fonctionne pour vous, veuillez soumettre une pull request.