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-2026-64788 — Preuve de concept pour CVE-2026-64788, une utilisation après libération dans l'extension noyau IOGPUFamily sur iOS 26.6, démontrant l'exploitation via la création de textures Metal et le heap spraying. | Kitploit
Outils/GitHubGitHub/bytev0rtex/cve-2026-64788
Sécurité iOSAnalyse des VulnérabilitésExploitationRétro-ingénierieSécurité MobileExploitation de Binaires
GitHubbytev0rtex/cve-2026-64788

CVE-2026-64788

Preuve de concept pour CVE-2026-64788, une utilisation après libération dans l'extension noyau IOGPUFamily sur iOS 26.6, démontrant l'exploitation via la création de textures Metal et le heap spraying.

Voir le dépôt
1il y a 10h 21mPas 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

CVE-2026-64788 — Use-After-Free dans IOGPUFamily

Composant : Extension noyau IOGPUFamily (com.apple.iokit.IOGPUFamily)
Affecté : iOS / iPadOS 26.6 (23G71) et versions antérieures
Corrigé dans : iOS / iPadOS 26.6.1 (23G83)
Type : Use-After-Free dans IOGPUDevice::create_resource_iosurface
Impact : Corruption de la mémoire du noyau ; déréférencement UAF confirmé sur A14 (iPhone 12)


Crédits

Découvert par : f00l (@PPPF00L), 3ndy1 (@_3ndy1), Minghao Lin (@Y1nkoc), 云散花折, Arjanit Isufi
(selon Bulletin de sécurité Apple — iOS 26.6.1)


Cause racine

IOGPUDevice::create_resource_iosurface alloue un objet IOGPUSysMemory (~0x100 octets, zone ) et l'enregistre dans la table de ressources IOSurface du périphérique. Avant de retourner, un contrôle de débordement de dimensions se déclenche via . Le chemin de débordement bifurque vers un retour d'erreur , laissant une entrée active dans la table de ressources qui pointe vers de la mémoire libérée.

kalloc.256
ADDS width+height → b.hs
sans libérer l'objet
root@kitploit:~
create_resource_iosurface:
  kalloc(0x100) → obj          ; IOGPUSysMemory alloué
  table[new_id] = obj           ; enregistré avec une référence
  ADDS w_result, w_width, w_height
  b.hs error_path               ; ← débordement : saute ici
error_path:
  ; objet NON libéré, entrée de table NON effacée
  return kIOReturnInvalid

L'entrée obsolète de la table persiste jusqu'à ce que le même ID de ressource soit réutilisé ou que le périphérique soit fermé.


Déréférencement UAF

IOGPUDevice::set_resource_purgeable(id) recherche l'ID obsolète via get_resource_by_id(), trouve l'entrée pendante et y accède de manière non virtuelle :

DécalageOpérationDescription
+0x010cldaddl w9(-4), w8, [obj+0x24]Décrémentation atomique de [obj+0x24] ; ancienne valeur → w8
+0x0128cbz w8, skip; ldr x1, [obj+0x28]Si ancien [+0x24] != 0 : charge [obj+0x28] comme argument de IOGPUMemory::setAllocation
+0x0134ldr x0, [obj+0x10]Charge [obj+0x10] comme argument IOCommandGate ; cbz → skip si 0

Comportement du PoC

Le PoC déclenche l'UAF en utilisant newTextureWithDescriptor:iosurface:plane: de Metal avec des dimensions de débordement conçues. Avant le déréférencement UAF :

  • 300× MTLBuffer(0x100, StorageModeShared) pulvérisés pour remplir l'emplacement kalloc.256 libéré
  • Les données de pulvérisation définissent [+0x10]=0, [+0x24]=0, [+0x28]=0 → Call2 et Call3 sont correctement ignorés
  • Le déréférencement UAF s'exécute sur une mémoire de tas contrôlée par l'attaquant

Détection du déclenchement : set_resource_purgeable sur une ressource inexistante retourne 0xe00002c2. Après l'UAF + la pulvérisation qui récupère l'emplacement, le même appel retourne 0xe0002be (ressource trouvée, Call1 déclenché) — confirmant que l'entrée obsolète est traitée avec nos données de pulvérisation.


Notes d'exploitation sur iOS 26

La séquestration de zones dans iOS 26 replace les objets IOGPUSysMemory libérés dans une liste libre de zone à type stable. Tant [obj+0x10] (IOMemoryDescriptor) que [obj+0x18] (IOGPUDevice) conservent des comptes de rétention externes et restent actifs après la libération de l'objet. Par conséquent, completeMemory() s'exécute toujours sur des données ivar valides — le déréférencement UAF est confirmé mais une primitive de lecture/écriture noyau via ce seul chemin est bloquée sur iOS 26 sans primitive secondaire pour briser la séquestration de zones.


Prérequis

  • iOS 26.6 (23G71) ou version antérieure
  • GPU de la série Apple A (testé : A14 Bionic, iPhone 12)
  • Aucune entitlement requise — accessible depuis toute application sandboxée compatible Metal

Compilation

root@kitploit:~
clang -arch arm64 -framework Metal -framework IOSurface \
      -framework IOKit -framework Foundation \
      -o poc poc/poc_iogpu_uaf.m

Ou ouvrez dans Xcode, définissez une équipe de signature valide et exécutez sur l'appareil.


Chronologie

DateÉvénement
2026-08-17iOS 26.6.1 publié avec le correctif
2026-08-17Crédits Apple publiés dans le bulletin de sécurité

Références

  • Bulletin de sécurité Apple — iOS 26.6.1
  • Publication Full Disclosure
Télécharger l’outil