
Squelette de PoC pour CVE-2021-28664, un use-after-free du pilote GPU Mali kbase, démontrant une primitive de lecture/écriture arbitraire de mémoire physique du noyau sur Android ARM64.
Squelette de PoC pour la chaîne d'exploitation UAF du pilote GPU Mali kbase (CVE-2021-28664) → primitives de lecture/écriture arbitraires en mémoire physique du noyau. Destiné aux plateformes ARM64 Android génériques, indépendant de tout fabricant ou modèle spécifique.
Le périmètre de recherche s'arrête exclusivement aux « primitives de lecture/écriture arbitraires en mémoire physique du noyau » : comment transformer un use-after-free dans un pilote GPU en une capacité de lecture/écriture mémoire noyau stable, contrôlée et à échec sécurisé.
Ce dépôt ne fournit aucun exploit. Il ne contient ni exploit fonctionnel, ni code directement exécutable, ni offsets/numéros de série/micrologiciels spécifiques à un appareil ; toute utilisation à des fins d'attaque est interdite (voir ci-dessous).
pipe_buffer ou les vérifications de copy_page_to_iter diffèrent significativement (à partir de 5.x, une revérification selon les sources correspondantes est nécessaire ; la structure de la chaîne peut servir de référence mais les détails ne sont pas universels) ;/dev/mali (restrictions SELinux/politiques du fabricant).TODO(DEVICE) ; l'adaptation relève du travail de rétro-ingénierie de l'utilisateur, le dépôt ne s'en charge pas.CVE-2021-28664 : le chemin MEM_ALIAS du pilote Mali kbase manque de vérification des permissions GPU_WR, permettant à un attaquant d'aliaser des pages mémoire GPU déjà libérées dans son propre espace d'adressage GPU, créant ainsi une « visibilité/écriture persistante côté GPU sur des pages physiques libérées » — un use-after-free à la frontière GPU/noyau.
L'intérêt de l'exploitation ne réside pas dans la mémoire GPU elle-même, mais dans le fait que :
WRITE_VALUE, modification ciblée des pages visibles via l'alias.buffer GPU victime + dump des tables de pages MMU → établissement de la carte d'adresses physiques
→ déclenchement de la libération du buffer pour créer de la pression → spray de pipes (F_SETPIPE_SZ réduit)
→ le tableau pipe_buffer atterrit dans la zone libérée (réutilisation UAF inter-cache)
→ scan du pointeur ops via la vue alias → fuite de anon_pipe_buf_ops → KASLR slide
→ réécriture GPU des champs page / offset / len du pipe_buffer
→ via les chemins légitimes de lecture/écriture de pipe
⇒ lecture de page physique arbitraire (falsification du pointeur page)
⇒ écriture de page physique arbitraire (chemin d'écriture pipe merge)
⇒ utilisation d'une page à contenu connu comme oracle d'auto-vérification, garantissant que les lectures/écritures ne tombent pas dans des trous/zones non mappées
Fin du périmètre.
page_to_virt selon les fabricants, zones réservées no-map inexistantes dans le mapping linéaire (toute lecture provoque un panic).docs/
01-exploit-chain.md De l'UAF aux primitives de lecture/écriture : principes et points d'implémentation de chaque phase
02-physical-address-model.md Modèle d'adresse physique, barrières de sécurité, ambiguïté m, pièges connus
exploit/
cve-2021-28664-poc.c Modèle de PoC : squelette complet du flux des primitives de lecture/écriture (sans valeurs d'appareil)
scripts/
README.md Description de la conception des outils d'automatisation expérimentale (boucle/vérification/restauration)
exploit/cve-2021-28664-poc.c est un modèle de squelette de PoC pour les primitives de lecture/écriture :
TODO(DEVICE), aucune valeur directement utilisable n'est fournie ;Il sert à comprendre comment l'ensemble de la chaîne est organisé ; il ne peut pas être compilé directement en un outil fonctionnel pour un appareil quelconque.
fs/pipe.c / include/linux/pipe_fs_i.h (sources publiques)Documentation/arch/arm64/memory.rst (documentation publique)exploit/) : GPL-3.0, voir LICENSEdocs/, scripts/) : CC BY-NC-SA 4.0, voir LICENSE-DOCS
(utilisation commerciale interdite ; les contenus dérivés doivent être partagés à l'identique et conserver cette déclaration)| Maillon | Condition préalable |
|---|
| Vulnérabilité elle-même | La version du pilote Mali kbase se situe dans la plage affectée par CVE-2021-28664 (série r avant correction amont) ; indépendant de la version du noyau, dépend uniquement du pilote |
| Ressources GPU | /dev/mali accessible à l'application concernée ; MEM_ALLOC prend en charge les grands buffers SAME_VA ; le comportement de MEM_ALIAS correspond à la description de la vulnérabilité |
| Réutilisation du pipe | Linux ≥ 4.5 (introduction de pipe_buf_operations), vérifié fonctionnel de 4.9 à 4.14 ; F_SETPIPE_SZ permet de réduire le pipe à une seule page |
| Fuite KASLR | Noyau compilé avec CONFIG_RANDOMIZE_BASE (arm64 ≥ 4.6) ; anon_pipe_buf_ops présent dans la table de symboles publique |
| Modèle d'adresse physique | arm64 + disposition vmemmap ; sizeof(struct page) et format des tables de pages doivent être mesurés empiriquement, aucune hypothèse permise |