
PoC skeleton per CVE-2021-28664, un caso di use-after-free nel driver GPU Mali kbase, che dimostra una primitiva di lettura/scrittura arbitraria della memoria fisica del kernel su Android ARM64.
Scheletro di PoC per la primitiva di lettura/scrittura arbitraria della memoria fisica del kernel tramite UAF nel driver GPU Mali kbase (CVE-2021-28664). Rivolto a piattaforme ARM64 Android generiche, indipendente da qualsiasi produttore o modello specifico.
L'ambito della ricerca si ferma esclusivamente alla "primitiva di lettura/scrittura arbitraria della memoria fisica del kernel": come trasformare un use-after-free in un driver GPU in una capacità di lettura/scrittura della memoria del kernel stabile, controllabile e in grado di fallire in modo sicuro.
Questo repository non fornisce alcun attacco. Non contiene exploit completi, non contiene codice eseguibile direttamente, non contiene offset/seriali/firmware di alcun dispositivo; è vietato utilizzare qualsiasi contenuto per attività offensive (vedi sotto).
pipe_buffer/nei controlli di copy_page_to_iter (a partire dalla 5.x è necessario ricontrollare in base al codice sorgente corrispondente; la struttura della catena è consultabile ma i dettagli non sono universali);/dev/mali (limitazioni SELinux/policy del produttore).TODO(DEVICE); l'adattamento è un lavoro di reverse engineering a carico dell'utente, il repository non lo fornisce.CVE-2021-28664: il percorso MEM_ALIAS del driver Mali kbase manca del controllo sui permessi GPU_WR, consentendo a un attaccante di fare alias di pagine di memoria GPU già liberate nel proprio spazio di indirizzamento GPU, creando una "visibilità/scrittura persistente lato GPU su pagine fisiche già liberate" — un use-after-free che attraversa il confine GPU/kernel.
Il valore dello sfruttamento non risiede nella memoria GPU stessa, ma nel fatto che:
WRITE_VALUE della GPU per modificare in modo mirato le pagine visibili tramite alias.buffer GPU victim + dump delle page table MMU → costruzione della mappa degli indirizzi fisici
→ trigger del rilascio del buffer per creare pressione → spray di pipe (F_SETPIPE_SZ ridotto)
→ l'array pipe_buffer finisce nell'area liberata (riutilizzo UAF cross-cache)
→ scansione del puntatore ops tramite vista alias → leak di anon_pipe_buf_ops → KASLR slide
→ riscrittura GPU dei campi page / offset / len di pipe_buffer
→ sfruttando i percorsi legittimi di read/write della pipe
⇒ lettura di pagina fisica arbitraria (falsificazione del puntatore page)
⇒ scrittura di pagina fisica arbitraria (percorso di scrittura pipe merge)
⇒ utilizzo di una pagina a contenuto noto come oracle di auto-verifica, per garantire che lettura/scrittura non cada in aree vuote/non mappate
Fino a qui.
page_to_virt dei produttori, aree riservate no-map che non esistono affatto nella mappatura lineare (leggerle causa panic).docs/
01-exploit-chain.md Dall'UAF alla primitiva di lettura/scrittura: principi e punti implementativi di ogni fase
02-physical-address-model.md Modello di indirizzamento fisico, cancelli di sicurezza, ambiguità m, trappole note
exploit/
cve-2021-28664-poc.c Template PoC: scheletro completo del flusso della primitiva di lettura/scrittura (senza valori del dispositivo)
scripts/
README.md Descrizione del design degli strumenti di automazione degli esperimenti (cicli/verifica/ripristino)
exploit/cve-2021-28664-poc.c è il template scheletro della PoC per la primitiva di lettura/scrittura:
TODO(DEVICE), non contiene alcun valore utilizzabile direttamente;Serve a comprendere come è organizzata l'intera catena, non è compilabile direttamente in uno strumento efficace contro alcun dispositivo.
fs/pipe.c / include/linux/pipe_fs_i.h (sorgenti pubblici)Documentation/arch/arm64/memory.rst (documentazione pubblica)exploit/): GPL-3.0, vedi LICENSEdocs/, scripts/): CC BY-NC-SA 4.0, vedi LICENSE-DOCS
(uso commerciale vietato; i contenuti derivati devono essere distribuiti con la stessa licenza e mantenere questa dichiarazione)| Fase | Prerequisito |
|---|
| Vulnerabilità in sé | La versione del driver Mali kbase ricade nell'intervallo interessato da CVE-2021-28664 (serie r precedente alla correzione a monte); indipendente dalla versione del kernel, dipende solo dal driver |
| Risorse GPU | /dev/mali accessibile al processo corrispondente; MEM_ALLOC supporta buffer di grandi dimensioni SAME_VA; il comportamento di MEM_ALIAS è conforme alla descrizione della vulnerabilità |
| Riutilizzo della pipe | Linux ≥ 4.5 (introduzione di pipe_buf_operations), verificato su 4.9 ~ 4.14; F_SETPIPE_SZ consente di ridurre la pipe a una singola pagina |
| Leak KASLR | Kernel con CONFIG_RANDOMIZE_BASE abilitato (arm64 ≥ 4.6); anon_pipe_buf_ops presente nella tabella dei simboli pubblici |
| Modello di indirizzamento fisico | arm64 + layout vmemmap; sizeof(struct page) e formato delle page table devono essere misurati empiricamente, non presunti |