
Il seguente problema esiste nel ramo android-msm-wahoo-4.4-pie di https://android.googlesource.com/kernel/msm (e possibilmente in altri):
C'è una use-after-free del membro wait nella struct binder_thread nel driver binder in /drivers/android/binder.c.
Come descritto nel commit upstream: “binder_poll() passa la waitqueue thread->wait che può essere messa in attesa per lavoro. Quando un thread che usa epoll esce esplicitamente usando BINDER_THREAD_EXIT, la waitqueue viene liberata, ma non viene mai rimossa dalla struttura dati epoll corrispondente. Quando il processo successivamente esce, il codice di cleanup di epoll tenta di accedere alla waitlist, il che risulta in una use-after-free.”
Il seguente proof-of-concept mostrerà il crash UAF in una build del kernel con KASAN (dal bug report upstream iniziale a 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);
}
Questo problema è stato corretto a dicembre 2017 nel kernel 4.14 LTS [1], nel kernel AOSP android 3.18 [2], nel kernel AOSP android 4.4 [3] e nel kernel AOSP android 4.9 [4], ma Pixel 2 con il bollettino di sicurezza più recente è ancora vulnerabile in base alla revisione del codice sorgente.
Altri dispositivi che sembrano vulnerabili in base alla revisione del codice sorgente sono (riferito alle versioni 8.x salvo diversa indicazione):
Abbiamo prove che questo bug viene sfruttato attivamente. Pertanto, questo bug è soggetto a una scadenza di divulgazione di 7 giorni. Dopo che sono trascorsi 7 giorni o una patch è stata resa ampiamente disponibile (a seconda di quale evento si verifichi prima), il bug report diventerà visibile al pubblico.
Confermato che questo proof-of-concept funziona su Pixel 2 con build walleye_kasan-userdebug 10 QP1A.191105.0035899767, causando un crash KASAN. Codice C del proof of concept e new.out allegati. Output della console KASAN allegato.
Ho ricevuto informazioni tecniche da TAG e parti esterne su un exploit Android attribuito al gruppo NSO. Questi dettagli includevano fatti sul bug e sulla metodologia dell'exploit, inclusi, ma non limitati a:
Usando questi dettagli, ho determinato che il bug utilizzato è quasi certamente quello descritto in questo report, poiché ho escluso altri potenziali candidati confrontando le patch. Una spiegazione più dettagliata di questo bug e della metodologia per identificarlo sarà scritta in un prossimo post del blog quando troverò il tempo.
Attualmente non abbiamo un campione dell'exploit. Senza campioni, non siamo stati in grado di confermare né la tempistica né il payload.
Il bug è una vulnerabilità di escalation di privilegi locale che consente il compromesso totale di un dispositivo vulnerabile. Se l'exploit viene distribuito tramite il web, deve solo essere abbinato a un exploit del renderer, poiché questa vulnerabilità è accessibile attraverso la sandbox.
Ho allegato un proof-of-concept di exploit locale per dimostrare come questo bug possa essere usato per ottenere lettura/scrittura arbitraria del kernel quando eseguito localmente. Richiede solo l'esecuzione di codice da un'app non attendibile per sfruttare CVE-2019-2215. Ho anche allegato uno screenshot (success.png) del POC in esecuzione su un Pixel 2, con Android 10 e livello di patch di sicurezza di settembre 2019 (google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys).
Dichiarazione del fornitore da Android:
"Questo problema è classificato come gravità alta su Android e da solo richiede l'installazione di un'applicazione dannosa per un potenziale sfruttamento. Altri vettori, come il browser web, richiedono il concatenamento con un exploit aggiuntivo. Abbiamo informato i partner Android e la patch è disponibile sul Android Common Kernel. I dispositivi Pixel 3 e 3a non sono vulnerabili, mentre i dispositivi Pixel 1 e 2 riceveranno aggiornamenti per questo problema come parte dell'aggiornamento di ottobre."