
Preuve de concept d'exploit pour CVE-2019-2215, une vulnérabilité de type utilisation après libération dans le pilote binder d'Android permettant l'escalade de privilèges locale sur les appareils vulnérables.
Le problème suivant existe dans la branche android-msm-wahoo-4.4-pie de https://android.googlesource.com/kernel/msm (et peut-être d'autres) :
Il y a une use-after-free du membre wait dans la structure binder_thread du pilote binder situé dans /drivers/android/binder.c.
Comme décrit dans le commit en amont : « binder_poll() passe la file d'attente thread->wait qui peut être mise en veille pour le travail. Lorsqu'un thread qui utilise epoll se termine explicitement avec BINDER_THREAD_EXIT, la file d'attente est libérée, mais elle n'est jamais supprimée de la structure de données epoll correspondante. Lorsque le processus se termine ensuite, le code de nettoyage epoll tente d'accéder à la liste d'attente, ce qui entraîne une use-after-free. »
La preuve de concept suivante montrera le crash UAF dans une compilation du noyau avec KASAN (d'après le rapport de bogue initial en amont sur https://lore.kernel.org/lkml/[email protected]/) : #include <fcntl.h> #include <sys/epoll.h> #include <sys/ioctl.h> #include <unistd.h>
#define BINDER_THREAD_EXIT 0x40046208ul
int main()
{
int fd, epfd;
struct epoll_event event = { .events = EPOLLIN };
fd = open("/dev/binder0", O_RDONLY);
epfd = epoll_create(1000);
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
ioctl(fd, BINDER_THREAD_EXIT, NULL);
}
Ce problème a été corrigé en décembre 2017 dans le noyau LTS 4.14 [1], le noyau AOSP android 3.18 [2], le noyau AOSP android 4.4 [3] et le noyau AOSP android 4.9 [4], mais le Pixel 2 avec le dernier bulletin de sécurité est toujours vulnérable selon l'examen du code source.
Les autres appareils qui semblent vulnérables selon l'examen du code source sont (en se référant aux versions 8.x sauf indication contraire) :
Nous avons des preuves que ce bogue est utilisé dans la nature. Par conséquent, ce bogue est soumis à un délai de divulgation de 7 jours. Après 7 jours écoulés ou après qu'un correctif a été largement disponible (selon la première éventualité), le rapport de bogue deviendra visible pour le public.
Confirmé que cette preuve de concept fonctionne sur Pixel 2 avec la build walleye_kasan-userdebug 10 QP1A.191105.0035899767, provoquant un crash KASAN. Code C de la preuve de concept et new.out joints. Sortie console KASAN jointe.
J'ai reçu des informations techniques de TAG et de parties externes concernant une exploitation Android attribuée au groupe NSO. Ces détails incluaient des faits sur le bogue et la méthodologie d'exploitation, y compris mais sans s'y limiter :
En utilisant ces détails, j'ai déterminé que le bogue utilisé est presque certainement celui de ce rapport car j'ai exclu d'autres candidats potentiels en comparant les correctifs. Une explication plus détaillée de ce bogue et de la méthodologie pour l'identifier sera rédigée dans un prochain article de blog quand j'aurai le temps.
Nous ne disposons actuellement pas d'un échantillon de l'exploit. Sans échantillons, nous n'avons pu confirmer ni la chronologie ni la charge utile.
Le bogue est une vulnérabilité d'élévation de privilèges locale qui permet une compromission complète d'un appareil vulnérable. Si l'exploit est délivré via le web, il a seulement besoin d'être associé à un exploit de rendu, car cette vulnérabilité est accessible via le bac à sable.
J'ai joint une preuve de concept d'exploit local pour démontrer comment ce bogue peut être utilisé pour obtenir une lecture/écriture arbitraire du noyau lorsqu'il est exécuté localement. Elle ne nécessite que l'exécution de code d'application non fiable pour exploiter CVE-2019-2215. J'ai également joint une capture d'écran (success.png) du POC fonctionnant sur un Pixel 2, exécutant Android 10 avec le niveau de correctif de sécurité de septembre 2019 (google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys).
Déclaration du fournisseur d'Android :
"Ce problème est évalué comme sévère (High severity) sur Android et nécessite en soi l'installation d'une application malveillante pour une exploitation potentielle. Toute autre vecteur, comme via un navigateur web, nécessite un chaînage avec un exploit supplémentaire. Nous avons notifié les partenaires Android et le correctif est disponible sur le noyau commun Android. Les appareils Pixel 3 et 3a ne sont pas vulnérables tandis que les appareils Pixel 1 et 2 recevront des mises à jour pour ce problème dans le cadre de la mise à jour d'octobre."