Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-28664-PoC — 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. | Kitploit
Outils/GitHubGitHub/woaphone/cve-2021-28664-poc
Sécurité AndroidCriminalistique MémoireAnalyse des VulnérabilitésExploitationSécurité MobileSécurité Matériel et IoTArticles et RechercheApprentissage et ÉducationExploitation de Binaires
GitHubwoaphone/cve-2021-28664-poc

CVE-2021-28664-PoC

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.

il y a 11h 5mPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

CVE-2021-28664-PoC

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


Avertissement / Disclaimer (à lire impérativement)

  1. Ce dépôt ne fournit aucun exploit. Il s'agit d'une rétrospective technique sur le principe de la vulnérabilité et les primitives de corruption mémoire, contenant uniquement de la documentation méthodologique et des modèles pédagogiques dont toutes les valeurs spécifiques aux appareils ont été laissées vides. Il ne peut pas être utilisé directement pour attaquer un appareil quelconque.
  2. Attaque interdite. Il est strictement interdit d'utiliser le contenu de ce dépôt sur tout appareil non autorisé, appartenant à autrui, ou à des fins illégales ; l'utilisateur assume l'entière responsabilité des conséquences qui en découlent, l'auteur n'étant pas concerné.
  3. Les expérimentations de recherche ont été menées uniquement sur des appareils appartenant à l'auteur, dans un but de reproduction de vulnérabilité et de recherche en sécurité.
  4. CVE-2021-28664 a été corrigée en amont (Arm/Mali) en 2021 ; les versions affectées sont les anciens pilotes/micrologiciels non mis à jour depuis longtemps. L'intérêt de cette recherche réside dans la compréhension des principes d'exploitation de vulnérabilités historiques et des approches de détection du point de vue défensif.
  5. Le contenu de ce dépôt est fourni « en l'état » (AS IS), sans garantie explicite ou implicite d'aucune sorte.
  6. Si vous représentez un fabricant ou une équipe de sécurité et avez besoin de plus de détails, veuillez contacter l'auteur via GitHub.

Périmètre d'application

Techniquement applicable (conditions préalables à chaque maillon de la chaîne d'exploitation)

Techniquement non applicable

  • Pilotes Mali ayant corrigé CVE-2021-28664 (après correction de la version r) ;
  • Plateformes GPU non-Mali (cette chaîne dépend profondément du comportement alias/MMU-dump de kbase) ;
  • Noyaux récents dont la structure 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) ;
  • Environnements sans accès à /dev/mali (restrictions SELinux/politiques du fabricant).

Déclaration de limites

  • Ce dépôt couvre uniquement les primitives de lecture/écriture ; la localisation de cibles noyau spécifiques après obtention des primitives, l'exploitation ultérieure ou l'élévation de privilèges ne relèvent pas du périmètre de ce dépôt.
  • Toutes les constantes liées aux appareils sont laissées vides dans les modèles sous la forme 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.

Contexte de la vulnérabilité

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 :

  1. Les pages physiques libérées sont réallouées par le slab/buddy du noyau à des objets noyau (dans cette recherche, des pipe_buffer) ;
  2. La vue alias GPU permet toujours de voir ces pages → possibilité de lire/écrire les champs d'objets utilisés par le noyau ;
  3. Grâce aux jobs GPU WRITE_VALUE, modification ciblée des pages visibles via l'alias.

Jusqu'où va cette recherche

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

Points techniques clés (chaque point fait l'objet d'une section dédiée dans docs/)

  • Barrières de sécurité multiples : toute lecture physique doit préalablement franchir plusieurs barrières (overlap / cohérence interne / contiguïté / auto-vérification du contenu) ; l'échec de l'une d'elles impose une restauration immédiate de l'état et une sortie — la discipline d'ingénierie la plus importante de toute cette recherche.
  • Pièges du modèle d'adresse physique : pollution des bits de drapeaux logiciels des PTE GPU, troncature à 32 bits des adresses physiques, randomisation KASLR également appliquée à l'adresse physique de base de l'image noyau, différences d'implémentation de page_to_virt selon les fabricants, zones réservées no-map inexistantes dans le mapping linéaire (toute lecture provoque un panic).
  • Gestion de l'ambiguïté m : l'ambiguïté des bits de poids fort de l'adresse physique ne se devine jamais ; utilisation d'un « oracle de page à contenu connu » pour l'auto-vérification du contenu.
  • Durée de vie des primitives et échec sécurisé : les sondes de lecture disposent d'un budget d'occurrences ; au-delà, l'itération en cours doit être abandonnée ; chaque chemin de sortie de chaque expérience doit restaurer les champs d'objets altérés.

Structure du dépôt

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

Description du code source

exploit/cve-2021-28664-poc.c est un modèle de squelette de PoC pour les primitives de lecture/écriture :

  • Il conserve la structure complète du flux (préparation des ressources → spray → scan → calibration → primitives de lecture/écriture → restauration et sortie) ;
  • Toutes les constantes liées aux appareils sont annotées TODO(DEVICE), aucune valeur directement utilisable n'est fournie ;
  • Chaque opération dangereuse est précédée de barrières de vérification explicites et de chemins de restauration, illustrant la conception de l'« échec sécurisé ».

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.

Références

  • Pilote ARM Mali kbase (arborescence de sources noyau publiques)
  • Historique de correction amont de CVE-2021-28664 et analyses publiques
  • Linux fs/pipe.c / include/linux/pipe_fs_i.h (sources publiques)
  • Modèle mémoire arm64 : Documentation/arch/arm64/memory.rst (documentation publique)

License

  • Code (exploit/) : GPL-3.0, voir LICENSE
  • Documentation (README, docs/, 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)
Télécharger l’outil
MaillonCondition préalable
Vulnérabilité elle-mêmeLa 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 pipeLinux ≥ 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 KASLRNoyau compilé avec CONFIG_RANDOMIZE_BASE (arm64 ≥ 4.6) ; anon_pipe_buf_ops présent dans la table de symboles publique
Modèle d'adresse physiquearm64 + disposition vmemmap ; sizeof(struct page) et format des tables de pages doivent être mesurés empiriquement, aucune hypothèse permise