Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2021-28664-PoC — 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. | Kitploit
Strumenti/GitHubGitHub/woaphone/cve-2021-28664-poc
Sicurezza AndroidMemory ForensicsAnalisi delle VulnerabilitàExploitSicurezza MobileSicurezza Hardware e IoTPaper e RicercaApprendimento e FormazioneBinary Exploitation
GitHubwoaphone/cve-2021-28664-poc

CVE-2021-28664-PoC

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.

11h 5m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

CVE-2021-28664-PoC

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).


Disclaimer / Esclusione di responsabilità (lettura obbligatoria)

  1. Questo repository non fornisce attacchi. Questo repository è una retrospettiva tecnica sui principi della vulnerabilità e sulle primitive di corruzione della memoria, contiene solo documentazione metodologica e template didattici con tutti i valori specifici del dispositivo lasciati vuoti. Non può essere utilizzato direttamente per attaccare alcun dispositivo.
  2. Attacchi vietati. È severamente vietato utilizzare il contenuto di questo repository su dispositivi non autorizzati, dispositivi altrui o per qualsiasi scopo illegale; tutte le conseguenze derivanti sono a carico esclusivo dell'utente e non riguardano l'autore.
  3. Gli esperimenti di ricerca sono stati condotti esclusivamente su dispositivi di proprietà dell'autore, con lo scopo di riprodurre la vulnerabilità e condurre ricerca sulla sicurezza.
  4. CVE-2021-28664 è stato corretto a monte (Arm/Mali) nel 2021; i sistemi interessati sono quelli con driver/firmware obsoleti non aggiornati da lungo tempo. Il valore di questa ricerca risiede nella comprensione dei principi di sfruttamento delle vulnerabilità storiche e negli approcci di rilevamento dal punto di vista difensivo.
  5. Il contenuto di questo repository è fornito "AS IS", senza alcuna garanzia esplicita o implicita.
  6. Se rappresenti un produttore/team di sicurezza e necessiti di maggiori dettagli, contatta l'autore tramite GitHub.

Ambito di applicabilità

Tecnicamente applicabile (prerequisiti affinché ogni fase della catena di sfruttamento sia valida)

Tecnicamente non applicabile

  • Driver Mali con CVE-2021-28664 già corretto (dopo la correzione della versione r);
  • Piattaforme con GPU non Mali (questa catena dipende profondamente dal comportamento alias/MMU-dump di kbase);
  • Kernel recenti con differenze significative nella struttura 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);
  • Ambienti senza permessi di accesso a /dev/mali (limitazioni SELinux/policy del produttore).

Dichiarazione sui limiti

  • Questo repository copre solo le primitive di lettura/scrittura; l'individuazione di obiettivi specifici del kernel dopo aver ottenuto la primitiva, l'ulteriore sfruttamento o l'escalation di privilegi non rientrano nell'ambito di questo repository.
  • Tutte le costanti relative al dispositivo sono lasciate vuote nei template con TODO(DEVICE); l'adattamento è un lavoro di reverse engineering a carico dell'utente, il repository non lo fornisce.

Contesto della vulnerabilità

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:

  1. Le pagine fisiche liberate vengono riallocate dal slab/buddy del kernel a oggetti del kernel (in questa ricerca, pipe_buffer);
  2. La vista alias della GPU può ancora vedere queste pagine → è possibile leggere e scrivere i campi degli oggetti attualmente in uso dal kernel;
  3. Sfruttando il job WRITE_VALUE della GPU per modificare in modo mirato le pagine visibili tramite alias.

Fino a dove arriva questa ricerca

root@kitploit:~
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.

Punti tecnici chiave (ogni punto ha una sezione dedicata in docs/)

  • Cancelli di sicurezza multilivello: prima di qualsiasi lettura fisica è necessario superare molteplici controlli di overlap / autoconsistenza / contiguità / auto-verifica del contenuto; al fallimento di uno qualsiasi, ripristinare immediatamente lo stato e uscire — la disciplina ingegneristica più importante dell'intera ricerca.
  • Le insidie del modello di indirizzamento fisico: contaminazione dei flag software nelle PTE della GPU, troncamento a 32 bit degli indirizzi fisici, randomizzazione KASLR anche della base fisica dell'immagine del kernel, differenze nelle implementazioni page_to_virt dei produttori, aree riservate no-map che non esistono affatto nella mappatura lineare (leggerle causa panic).
  • Gestione dell'ambiguità m: l'ambiguità dei bit alti dell'indirizzo fisico non va mai risolta per ipotesi; si utilizza l'"oracle della pagina a contenuto noto" per l'auto-verifica del contenuto.
  • Durata della primitiva e fallimento sicuro: le sonde di lettura hanno un budget di tentativi; superato il limite è necessario abbandonare il ciclo corrente; ogni percorso di uscita di ogni esperimento deve ripristinare i campi degli oggetti manomessi.

Struttura del repository

root@kitploit:~
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)

Note sul codice sorgente

exploit/cve-2021-28664-poc.c è il template scheletro della PoC per la primitiva di lettura/scrittura:

  • Mantiene la struttura completa del flusso (preparazione risorse → spray → scansione → calibrazione → primitiva di lettura/scrittura → ripristino e uscita);
  • Tutte le costanti relative al dispositivo sono annotate con TODO(DEVICE), non contiene alcun valore utilizzabile direttamente;
  • Prima di ogni operazione pericolosa sono presenti cancelli di verifica espliciti e percorsi di ripristino, che mostrano il design del "fallimento sicuro".

Serve a comprendere come è organizzata l'intera catena, non è compilabile direttamente in uno strumento efficace contro alcun dispositivo.

Riferimenti

  • Driver ARM Mali kbase (albero dei sorgenti kernel pubblici)
  • Registro della correzione a monte di CVE-2021-28664 e analisi pubbliche
  • Linux fs/pipe.c / include/linux/pipe_fs_i.h (sorgenti pubblici)
  • Modello di memoria arm64: Documentation/arch/arm64/memory.rst (documentazione pubblica)

License

  • Codice (exploit/): GPL-3.0, vedi LICENSE
  • Documentazione (README, docs/, 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)
Scarica lo strumento
FasePrerequisito
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 pipeLinux ≥ 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 KASLRKernel con CONFIG_RANDOMIZE_BASE abilitato (arm64 ≥ 4.6); anon_pipe_buf_ops presente nella tabella dei simboli pubblici
Modello di indirizzamento fisicoarm64 + layout vmemmap; sizeof(struct page) e formato delle page table devono essere misurati empiricamente, non presunti