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
Outils/GitHubGitHub/felix-pb/kfd
Sécurité iOSExploitationSécurité MobileExploitation de Binaires
GitHubfelix-pb/kfd

kfd

kfd, abréviation de kernel file descriptor, est un projet permettant de lire et d'écrire la mémoire du noyau sur les appareils Apple.

Voir le dépôt
1k1848il y a 2 ansVérifié par Kitploit

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

Avertissement rapide : je n'ai pas l'intention d'ajouter des offsets pour d'autres appareils et versions d'iOS.

kfd

kfd, abréviation de kernel file descriptor, est un projet pour lire et écrire la mémoire du noyau sur les appareils Apple. Il exploite diverses vulnérabilités qui peuvent être utilisées pour obtenir des PTEs pendants, ce qui sera appelé une primitive PUAF, abréviation de « physical use-after-free ». Ensuite, il réalloue certains objets du noyau dans ces pages physiques et les manipule directement depuis l'espace utilisateur via les PTEs pendants afin d'obtenir une primitive KRKW, abréviation de « kernel read/write ». Le code de l'exploit est entièrement contenu dans une bibliothèque, libkfd, mais le projet contient également de simples wrappers exécutables pour iOS et macOS. L'API publique de libkfd est assez réduite et intuitive :

root@kitploit:~
enum puaf_method {
    puaf_physpuppet,
    puaf_smith,
    puaf_landa,
};

enum kread_method {
    kread_kqueue_workloop_ctl,
    kread_sem_open,
};

enum kwrite_method {
    kwrite_dup,
    kwrite_sem_open,
};

u64 kopen(u64 puaf_pages, u64 puaf_method, u64 kread_method, u64 kwrite_method);
void kread(u64 kfd, u64 kaddr, void* uaddr, u64 size);
void kwrite(u64 kfd, void* uaddr, u64 kaddr, u64 size);
void kclose(u64 kfd);

kopen() ouvre conceptuellement un « descripteur de fichier noyau ». Il prend les 4 arguments suivants :

  • puaf_pages: Le nombre cible de pages physiques avec des PTEs pendants.
  • puaf_method: La méthode utilisée pour obtenir la primitive PUAF, avec les options suivantes :
    • puaf_physpuppet:
      • Cette méthode exploite CVE-2023-23536.
      • Corrigée dans iOS 16.4 et macOS 13.3.
      • Accessible depuis le sandbox App mais pas depuis le sandbox WebContent.
      • Récompense de 52 500 $ du programme Apple Security Bounty.
    • puaf_smith:
      • Cette méthode exploite CVE-2023-32434.
      • Corrigée dans iOS 16.5.1 et macOS 13.4.1.
      • Accessible depuis le sandbox WebContent et pourrait avoir été activement exploitée.
    • puaf_landa:
      • Cette méthode exploite CVE-2023-41974.
      • Corrigée dans iOS 17.0 et macOS 14.0.
      • Accessible depuis le sandbox App mais pas depuis le sandbox WebContent.
      • Récompense de 70 000 $ du programme Apple Security Bounty.
  • kread_method: La méthode utilisée pour obtenir la primitive kread() initiale.
  • kwrite_method: La méthode utilisée pour obtenir la primitive kwrite() initiale.

Si l'exploit réussit, kopen() renvoie un descripteur de fichier opaque de 64 bits. En pratique, il s'agit simplement d'un pointeur d'espace utilisateur vers une structure nécessaire à libkfd. Toutefois, étant donné que cette structure ne doit pas être accédée en dehors de la bibliothèque, elle est renvoyée sous forme d'entier opaque. Si l'exploit échoue, la bibliothèque affiche un message d'erreur, dort pendant 30 secondes, puis se termine avec un code de statut 1. Elle dort 30 secondes car le noyau pourrait paniquer à la sortie pour certaines méthodes PUAF qui nécessitent un nettoyage post-KRKW (par exemple puaf_smith).

kread() et kwrite() sont les équivalents côté espace utilisateur de copyout() et copyin(), respectivement. Veuillez noter que les options pour kread_method et kwrite_method sont décrites dans un write-up séparé. De plus, les primitives initiales accordées par ces méthodes peuvent être utilisées pour amorcer une meilleure primitive KRKW. Enfin, kclose() ferme simplement le descripteur de fichier noyau. Toutes prennent l'entier opaque renvoyé par kopen() comme premier argument.


Comment compiler et exécuter kfd sur un iPhone ?

Dans Xcode, ouvrez le dossier racine du projet et connectez votre appareil iOS.

  • Pour compiler le projet, sélectionnez Product > Build (⌘B).
  • Pour exécuter le projet, sélectionnez Product > Run (⌘R), puis cliquez sur le bouton "kopen" dans l'application.

Comment compiler et exécuter kfd sur un Mac ?

Dans un terminal, placez-vous dans le dossier racine du projet.

Optionnellement, pour augmenter les limites de descripteurs de fichiers globale et par processus, ce qui améliorera le taux de réussite en particulier lors de plusieurs exécutions consécutives, entrez la commande make s et saisissez le mot de passe sudo.

  • Pour compiler le projet, entrez la commande make b.
  • Pour exécuter le projet, entrez la commande make r.
  • Pour compiler et exécuter le projet en une seule fois, entrez la commande make br.

Où trouver des write-ups détaillés pour les exploits ?

Ce README a présenté une vue d'ensemble de haut niveau du projet kfd. Une fois qu'une primitive PUAF a été obtenue, le reste de l'exploit est générique. Par conséquent, j'ai rassemblé la partie commune des exploits dans un write-up dédié :

  • Exploiter les PUAF

De plus, j'ai réparti la partie spécifique à la vulnérabilité des exploits utilisés pour obtenir la primitive PUAF en write-ups distincts, listés ci-dessous dans l'ordre chronologique de leur découverte :

  • PhysPuppet
  • Smith
  • Landa

Cependant, veuillez noter que ces write-ups ont été écrits pour un public déjà familier avec le système de mémoire virtuelle XNU.

Télécharger l’outil