
Exploit du noyau Android pour CVE-2019-2215, une utilisation après libération (use-after-free) dans le pilote Binder, permettant une escalade de privilèges vers root via une corruption mémoire et un patchage de creds sur les appareils ARM64 vulnérables.
CVE-2019-2215 — Escalade de privilèges par use-after-free sur le binder Android Description
Exploit pour la vulnérabilité CVE-2019-2215 — use-after-free dans le pilote binder du noyau Android. Permet d'élever les privilèges jusqu'à root sur les appareils vulnérables. Vulnérabilité
CVE-2019-2215 — use-after-free dans binder_thread lors de l'utilisation d'epoll. L'erreur provient d'une gestion incorrecte de la file d'attente wait dans binder_poll(), ce qui permet de réécrire la mémoire du noyau.
Principe de fonctionnement
Fuite de pointeur (leakTaskStruct)
Une course entre epoll et binder permet de lire le pointeur vers task_struct du processus courant via writev/pipe.
Réécriture de addr_limit (clobberAddrLimit)
Utilisation de la même course pour écrire 0xFFFFFFFFFFFFFFFE dans le champ addr_limit de la structure task_struct, ce qui ouvre l'accès à toute la mémoire du noyau.
Correction de cred (patchCred)
Via un pipe (kernel_fd), la structure cred du processus courant est lue et réécrite :
UID/GID = 0 (root)
Capacités complètes (CAP_FULL_SET)
Désactivation de SELinux (disableSELinuxEnforcing)
Via nsproxy, l'adresse de base du noyau est calculée et le drapeau selinux_enforcing est mis à zéro.
Lancement d'un shell avec les droits root : system("/bin/sh")
Prérequis
Appareil avec une version vulnérable d'Android (avant le correctif d'octobre 2019)
Architecture ARM64
Présence de /dev/binder
Lors de la compilation, les symboles du noyau doivent être spécifiés :
init_nsproxy — pour calculer la base du noyau
selinux_enforcing — pour désactiver SELinux
Les symboles peuvent être obtenus depuis /proc/kallsyms sur le système cible.