UnjailMe
Eine Sandbox-Escape basierend auf:
- dem Proof-of-Concept (CVE-2018-4087) von Rani Idan (Zimperium)
- dem securityd-Überlauf-PoC von @cheesecakeufo (zeroday, keine CVE bekannt, danke Abraham!)
Über das ZIMPERIUM PoC
Rani nutzte sbtool von Jonathan Levine, um herauszufinden, welche Dienste für die Kommunikation aus der Sandbox zugänglich waren.
Er fand dann unter more bluetoothd und richtete Code zum Abfangen von Nachrichten von und zum Dienst ein.
Dadurch fand er heraus, dass er die Sitzung vieler Daemons kapern und den Client-Port preisgeben konnte.
Auf diese Weise fand er heraus, dass es möglich war, einen Callback mit zusätzlichen Daten zur Client-Verbindung zu bluetoothd hinzuzufügen.
Die Folge davon ist, dass die Kontrolle über den Prozesszähler (Callback) und das Register x3 (zusätzliche Daten) von System-Daemons erlangt werden kann, von denen ein Client-Port (Sitzung) abgefangen wird.
Damit besteht die Möglichkeit, eine Sandbox-App in einen privilegierten Kontext zu entlassen, sodass sie Code mit Systemberechtigungen ausführt.
Apple hat die Schwachstellen in iOS 11.2.5 durch Verwendung von arc4random() für die Sitzungs-ID gepatcht.
Es scheint nicht mehr möglich zu sein, den Port eines Clients zu erlangen, aber Sitzungen abzufangen ist es immer noch.
Es dauert ungefähr 5 Tage, um dieses arc4random() in diesem neuen Patch zu brute-forcen (4.294.967.296 Möglichkeiten), und daher warte ich immer noch auf einen endgültigen Patch, da dies nicht als Behebung des Sicherheitsproblems angesehen wird.
Quelle: Zimperium Blog
Über Abraham Masris PoC
Soweit ich weiß, handelt es sich um einen Pufferüberlauf in der Kommunikation mit securityd.
Dies geschieht durch die Bereitstellung einer XPC-Nachricht, die eine wörterbuchbasierte Wert-Schlüssel-Nachricht ist, mit einer ungültigen Länge.
Der Dienst empfängt die Nachricht und der Unterlauf tritt auf.
Abraham scheint eine Möglichkeit gefunden zu haben, viele Prozessorregister zu kontrollieren, was die Codeausführung mit Systemrechten für Apps ermöglicht, die im System laufen.
Abrahams PoC zeigt, dass Abraham selbst versucht, einen Exploit für diese Schwachstelle zu erstellen, da Code zum Leaken von Basisadressen existiert, was als Beginn der Erstellung einer ROP-Kette bekannt ist.
Es ist unbekannt, ob Abraham plant, diesen Exploit selbst zu schreiben oder uns in die richtige Richtung zu weisen.
Voraussetzungen
- Ein 64-Bit-iOS-Gerät mit iOS 10 bis 11.3.1
Über dieses Projekt
- Dieses Projekt ist kein Jailbreak und wird auch nicht zu einem beitragen, da es nur im Userspace operiert
- Dieses Projekt kann nicht und wird niemals die Fähigkeit erlangen, in das Rootdateisystem zu schreiben, da dieses als schreibgeschützt eingehängt ist, wie vom Kernel erzwungen.
- Dieses Projekt erlaubt nicht einfach beliebige Codeausführung in Form von dynamischen Bibliotheken, wie es Cydia Substrate tut.
- Das Hauptziel des Projekts ist es, eine in einer Sandbox befindliche Container-App auf Systemrechte zu eskalieren.
- AMFI erzwingt, dass alle Binärdateien gültig signiert sind, und dieses Projekt kann AMFI nicht patchen.
- Das Projekt zielt darauf ab, Lese- und Schreibberechtigung für die Benutzerdatenpartition (/var/root, /var/mobile) zu erlangen.
- Das Projekt zielt darauf ab, Zugriff auf den geschützten Schlüsselbundspeicher zur Wiederherstellung von Anmeldeinformationen und für forensische Zwecke zu erlangen.
- Das Projekt zielt auch darauf ab, Serverfunktionalität für die Ausführung von Code als Root und für Dateiübertragungen bereitzustellen.
- Das Projekt sollte Entwicklern und Forschern als Hilfe für Beiträge dienen.
- Das Projekt wird es Jailbreak-Entwicklern und Sicherheitsforschern erleichtern, Fehler in Kernel-Treibern zu finden, die nur aus einem privilegierten Kontext zugänglich sind, oder Userspace-Fehler mithilfe von Fuzzing-Techniken.
- Das Projekt wird es Jailbreak-Tweak-Entwicklern erleichtern, die neuen iOS 11-Funktionen zu erforschen und die Tweak-Entwicklung auf einem Live-Gerät zu debuggen.
- Dieses Projekt hat den Hauptfokus, für iOS 10 bis 11.2.5 zu funktionieren, kann aber theoretisch auch 11.2.5 bis einschließlich 11.3 unterstützen, wenn Exploits entwickelt werden.
Screenshot
Verwendung der App
- Die App fügt dem Projekt keinen Mehrwert hinzu, dient aber als visuelle Darstellung für diejenigen, die danach fragen (Viele aufgeheizte Leute aus der Community haben danach gefragt)
- Die App wird Informationen aus Bibliotheken und Frameworks ausgeben, einschließlich Speicher, Mach-O-Informationen und deren Basisadressen, was für die ROP-Entwicklung nützlich ist.
- Die Logik in der App kann aufgrund der vielen Parser- und Druckvorgänge bis zu 15 Minuten dauern; dies wird in finalen Versionen nicht der Fall sein.
- Die App wird Ihrem iPhone keinen Mehrwert verleihen oder das Verhalten der Software verändern, wie sie ist; einige Daemons können abstürzen, aber es entsteht kein permanenter Schaden am System.
- Es wird empfohlen, dass Forscher dieses Projekt stattdessen in Xcode ausführen
FEHLERBEHEBUNG (nicht nötig, aber für den Fall der Fälle)
- App löschen
- Bluetooth ausschalten
- Neustart
- Bluetooth einschalten
- Bluetooth ausschalten
Funktionen
- FTP-Zugriff (derzeit in Sandbox, zukünftig ohne Sandbox)
- Visueller PoC
- PoC von zerodium (endlich leicht verbessert, kann die Funktion system() aufrufen)
- PoC von Abraham, das in der Lage sein sollte, beliebigen Code als Root auszuführen, perfekt für SSH.
- PoC von Sem Voigtlander (Kernel-Adressraumbellegungs-DoS, für Neustart-Gerätefunktion).
Geplant
- Vollständiger Exploit einschließlich der vollständigen Kontrolle über den Adressraum anderer Daemons.
- Remote-SSH-Shell-Zugriff (dropbear oder ein Derivat).
Zukünftige Überlegungen
- SpringBoardd-Code-Injektion (Hallo liebe Jailbreak-Liebhaber)
launchd (Nicht möglich, da wir keine Sitzung dafür erlangen können).
Hypothese (nur Spekulation)
- Daemon mit launchd-Berechtigungen finden / Berechtigungen injizieren.
Code injizieren, der das BaseBoard-Framework lädt
- Adressen von Bibliotheken im dyld_shared_cache leaken.
- Ein ROP-Gadget in einer beliebigen Bibliothek im dyld_shared_cache finden.
- Die ROP-Kette aufrufen, indem der Callback und die zusätzlichen Daten des Callbacks gesetzt werden.
- Verwenden Sie reverse-engineerte Logik von BaseBoard, um launchd zu veranlassen, amfid mit Argumenten und deaktiviertem ASLR auszuführen.
- amfid patchen
- Verwenden Sie reverse-engineerte Logik von BaseBoard, um afcd mit Argumenten für / und deaktiviertem ASLR auszuführen (ähnlich wie afc2).
- Verwenden Sie reverse-engineerte Logik von BaseBoard, um unjaild auszuführen, einen Daemon, der als Wrapper um launchd verwendet werden kann und Aufgabenberechtigungen und Code-Injektion verwaltet.
- Erlangen Sie einen Taskport über launchd mit deaktiviertem ASLR unter Verwendung der BaseBoard-Logik
Zu untersuchen
- AMFI-Patches (Nicht einfach, wir können keine Sitzungen über amfi erlangen, aber wir können möglicherweise über andere Daemons eskalieren).
- Berechtigungsinjektion (Nicht ganz notwendig, wir haben die Kontrolle über so viele Daemons, dass wir dies nicht benötigen).
- Weiter eskalieren mit privaten APIs (BaseBoard.framework kann Prozesse mit deaktiviertem ASLR und Systemrechten starten)???
- liblorgnette wiederbeleben und auf iOS portieren (ERLEDIGT)
IPA herunterladen
https://github.com/MTJailed/UnjailMe/releases/tag/0.1
Danksagungen
- Abraham (@cheesecakeufo) für seinen securityd-Zeroday
- Schwachstelle und erster PoC: Rani Idan (Zimperium) <3
- PureFTPd
- liblorgnette-Projekt (mit meinen eigenen geringfügigen Verbesserungen)
- NEWUI von @ringarang
Spenden oder beitragen
- Quellcode kann auf Anfrage per DM auf Twitter (@MTJailed) gegeben werden
- Bitte spenden Sie, ich habe sehr wenig Zeit und Mittel, um an solchen Projekten zu arbeiten! (http://paypal.me/devsupport)
- Bald wird der Quellcode (außer FTP) hier auf GitHub sein.