Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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
pwn2own2020 — Compromettre le noyau macOS via Safari en enchaînant six vulnérabilités | Kitploit
Outils/GitHubGitHub/sslab-gatech/pwn2own2020
Escalade de PrivilègesExploitationShellcodeExploitation d'Applications WebTests d'IntrusionDéveloppement de Charges UtilesExploitation de Binaires
GitHubsslab-gatech/pwn2own2020

pwn2own2020

Compromettre le noyau macOS via Safari en enchaînant six vulnérabilités

Voir le dépôt
4145822il y a 5 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

Compromettre le noyau macOS via Safari en enchaînant six vulnérabilités

Aperçu

Ce dépôt contient les détails d'exploitation et techniques de notre soumission gagnante du Pwn2Own 2020 ciblant Apple Safari avec une élévation de privilèges du noyau pour macOS 10.15.3. Pour plus d'informations, vous pouvez également consulter nos slides du Blackhat USA 2020 et la vidéo. Ce dépôt inclut également notre vidéo de démonstration pour l'exploitation réussie.

Comment reproduire

  1. Lancez le serveur HTTP en utilisant python3 dans le dossier exploits.```shell $ python3 -m http.server 80
2. Accédez au site Web avec l'IP du serveur attaquant avec Safari :```
http://[attacker_ip]/exploit.html
  1. Attendez que la calculatrice apparaisse (généralement en dix secondes, mais si vous êtes malchanceux, cela peut prendre plus de temps) ainsi qu'un terminal avec privilège noyau. Pour montrer notre élévation de privilège noyau, nous avons désactivé SIP. Vous pouvez vérifier en exécutant la commande csrutil status, qui affichera disabled.

Construire à partir des sources

Pour votre commodité, nous avons fourni un payload compilé, payload.js. Mais, si vous le souhaitez, vous pouvez le construire vous-même. Notez que cela prendra beaucoup de temps car nous construirons WebKit dans le cadre de notre chaîne d'exploitation. Il est à noter que nous n'avons testé notre processus de construction que sur Mac OS.```shell

Install xcode first

$ python3 -m pip install --user lief $ make

Détails techniques
-----------------

Pour réaliser cette exploitation, nous avons enchaîné les *six* vulnérabilités suivantes.

### 1. Exécution de code à distance dans Safari via une modélisation incorrecte des effets de bord de l'opérateur 'in' dans le compilateur DFG de JavaScriptCore

- Analyse de la cause racine

Dans JavaScriptCore, lorsqu'une propriété indexée est interrogée avec l'opérateur 'in',
le compilateur DFG suppose qu'elle est sans effet de bord à moins qu'un objet proxy
dans sa chaîne de prototypes ne puisse intercepter cette opération.
JavaScriptCore marque un objet pouvant intercepter cet accès à une propriété indexée
à l'aide du drapeau appelé 'MayHaveIndexedAccessors'. Ce drapeau est explicitement
marqué pour l'objet Proxy.```javascript
0 in [] // side-effect free

let arr = [];
arr.__proto__ = new Proxy({}, {});
0 in arr // can cause side-effect!

Cependant, il existe un autre objet qui peut provoquer des effets secondaires : JSHTMLEmbedElement qui implémente sa propre méthode getOwnPropertySlot(). Une façon de déclencher des rappels JavaScript (c'est-à-dire des effets secondaires) avec l'opérateur 'in' est d'utiliser l'élément <embed> avec le plugin PDF ; lorsqu'une propriété est interrogée sur l'objet DOM de l'élément embed/object, il essaie de charger le plugin sous-jacent et le gestionnaire d'événements DOMSubtreeModified peut être appelé dans le cas du plugin PDF car il utilise la méthode appendChild sur l'élément body.

Télécharger l’outil