
AppEnumGuard v1.2
CVE-2025-31207-Mitigation und Sandbox-Tester für rootless- und rootHide-Jailbreaks auf iOS 15–18.4.1.
AppEnumGuard
AppEnumGuard ist ein defensiver Tweak für den Seitenkanal zur Enumeration installierter Anwendungen, der als CVE-2025-31207 geführt wird. Er unterstützt herkömmliche rootless- und rootHide-Jailbreak-Umgebungen auf iOS 15.0–18.4.1. Das Repository enthält außerdem eine normale sandboxed iOS-Testanwendung, die das verwundbare Ergebnis demonstriert und die Mitigation verifiziert.
CVE-2025-31207
CVE-2025-31207 ist eine Informationsoffenlegungsschwachstelle in Apples FrontBoard-Logik zum Starten von Anwendungen. Eine sandboxed Anwendung kann beliebige Bundle-Identifier über eine private SpringBoardServices-Startfunktion übermitteln und installierte Anwendungen von fehlenden Anwendungen anhand unterschiedlicher Rückgabecodes unterscheiden. Dadurch können private Informationen über die vom Benutzer installierten Anwendungen preisgegeben werden, einschließlich Banking-, Messaging-, Sicherheits-, Sideloading- und Jailbreak-bezogener Apps.
Apple beschreibt das Problem als Logikfehler, der es einer Anwendung ermöglichen könnte, installierte Apps zu enumerieren. Apple hat es mit verbesserten Prüfungen in iOS und iPadOS 18.5 behoben. Folglich bleiben Systeme vor iOS 18.5 auf Betriebssystemebene betroffen.
Kompatibilität
| Komponente | Unterstütztes Ziel |
|---|---|
| iOS | 15.0–18.4.1 |
| Jailbreak | Jede herkömmliche rootless- oder rootHide-Jailbreak-Umgebung |
| Bootstrap-/Paketarchitektur | rootless / iphoneos-arm64; rootHide / iphoneos-arm64e |
| Gerätearchitektur | arm64 und arm64e (rootless); arm64e (rootHide) |
| Paket | Installieren Sie das Paket, das zum Bootstrap des Geräts passt |
Der Standard-Build verwendet herkömmliches rootless Theos und enthält arm64- und arm64e-Slices. Die rootHide-Variante wird mit rootHide Theos gebaut und enthält die erforderlichen rootHide-.jbroot-Loader-Pfade. Beide Pakete deklarieren
firmware (>= 15.0) und
firmware (<< 18.5): Die Mitigation ist auf iOS 18.5 und neuer unnötig, da Apple dort CVE-2025-31207 behoben hat.
Der SpringBoard-seitige Tweak v1.1 und der sandboxed Tester wurden gemeinsam auf iOS 17.3.1 Build 21D61 mit deaktivierter Injektion für den Tester verifiziert. Der Tester erkannte das Leck mit entferntem Tweak und lieferte nach der Installation des Tweaks ein grünes Bestehen.
Funktionsweise
Das veröffentlichte Primitiv ruft die private SpringBoardServices-Funktion
SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions auf. Auf einem verwundbaren System gibt sie unterschiedliche Fehler für eine installierte Anwendung und eine fehlende Anwendung zurück:
9: Ziel existiert, aber der Start wird durch die Richtlinie verweigert7: Ziel existiert nicht
AppEnumGuard 1.1 injiziert nur in SpringBoard und hookt die gemeinsame
FBSystemService-Methode zur Vertrauensvalidierung. Wenn eine nicht autorisierte Startanfrage den Sicherheitsrichtlinienfehler 3 aus FBSOpenApplicationErrorDomain zurückgeben würde, ändert der Tweak ihn in den Fehler 4 „Anwendung nicht gefunden“. Die äußere SpringBoardServices-API gibt dann 7 sowohl für installierte als auch für fehlende Ziele zurück.
Die Argumentanzahl und die Objective-C-Typkodierung der privaten Methode werden vor der Installation des Hooks validiert. Wenn Apple die ABI ändert, schlägt AppEnumGuard offen fehl, anstatt eine unbekannte SpringBoard-Methode zu hooken.
Änderung gegenüber 1.0
Version 1.0 hookte SpringBoardServices innerhalb jeder UIKit-Anwendung. Es funktionierte, erforderte jedoch Injektion in jede zu schützende App; eine App, die die Injektion deaktivierte oder erkannte, konnte die Mitigation umgehen. Version 1.1 verlagert die Durchsetzung auf SpringBoard, sodass ein einziger zentraler Hook Aufrufer schützt, ohne AppEnumGuard in deren Prozesse zu injizieren.
Release-Downloads
Release 1.2 kann für beide Bootstraps gebaut werden:
AppEnumGuard_1.2_rootless_iphoneos-arm64.deb— herkömmlicher rootless-TweakAppEnumGuard_1.2_roothide_iphoneos-arm64e.deb— rootHide-TweakAppEnumGuardTester_1.2_sandboxed.ipa— sandboxed Verifikations-App mit Icon
Installieren und verifizieren
- Installiere die
.deb, die zum rootless- oder rootHide-Bootstrap passt, und führe einen Respring durch. - Installiere die Tester-IPA mit einer normalen Entwickler-/Sideloading-Signatur.
- Lasse die AppEnumGuard-Injektion für AppEnum Test deaktiviert; v1.1 schützt sie vor SpringBoard.
- Tippe auf das Symbol einer App, von der du weißt, dass sie installiert ist. Presets sind verfügbar für WhatsApp, YouTube, Spotify, Dopamine, TrollStore und Reddit.
Erwartete Ergebnisse mit dem ausgewählten installierten Ziel:
| Zustand | Ziel | Fehlend | Tester-Ergebnis |
|---|---|---|---|
| Tweak nicht vorhanden | 9 | 7 | Rot / FAIL |
| Tweak aktiv | 7 | 7 | Grün / PASS |
Der Tester meldet nur für das bekannte anfällige 9 / 7-Ergebnis Rot und für
jedes andere numerische Ergebnis Grün; ein rotes Ergebnis besagt, dass AppEnumGuard nicht installiert ist.
Grüne Ergebnisse sind mit App not detected gekennzeichnet. Das anfällige 9 / 7-Ergebnis
ist mit App detected und AppEnumGuard missing gekennzeichnet.
Wähle nur eine App aus, von der du weißt, dass sie installiert ist: 7 / 7 allein
kann eine funktionierende Mitigation nicht von einem nicht existierenden Ziel unterscheiden.
Der Tester enthält außerdem eine kurze Projektbeschreibung und einen anklickbaren Link zu diesem GitHub-Repository.
Der Gerätetest reproduzierte beide Zustände mit deaktivierter Tester-Injektion:
Das Deinstallieren des Tweaks erzeugte das rote 9 / 7-Ergebnis, während das Installieren von v1.1
das grüne 7 / 7-Ergebnis erzeugte.
Den Tweak bauen
Mit Standard-Theos ist der Standard-Build konventionell rootless:
cd Tweak
make clean package FINALPACKAGE=1
Für rootHide installieren Sie rootHide Theos und führen Sie aus:
cd Tweak
THEOS=/path/to/theos-roothide \
make clean package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=roothide
Die Tester-IPA erstellen
Der Tester wird mit dem iPhoneOS-SDK von Xcode kompiliert und benötigt weder Jailbreak noch erhöhte Entitlements:
./scripts/build-tester-ipa.sh
Die resultierende IPA wird in dist/ abgelegt. Sie ist ad-hoc signiert, sodass ein Installer sie mit einer normalen Entwicklungsidentität neu signieren kann. Gewähre ihr nicht platform-application oder com.apple.private.security.no-sandbox, da der Test speziell dafür gedacht ist, aus einer normalen Anwendungssandbox heraus zu laufen.
Umfang und Einschränkungen
- Dies ist eine User-Space-Mitigation für das veröffentlichte SpringBoardServices-Primitiv, nicht Apples vollständiger FrontBoard-Patch.
- Version 1.1 erfordert keine Injektion in geschützte Anwendungen. Das globale Deaktivieren der Injektion oder für SpringBoard selbst deaktiviert die Mitigation.
- Die serverseitige Implementierung ist auf iOS 17.3.1 Build 21D61 bestätigt. Auf anderen unterstützten Versionen installiert der Tweak seinen Hook nur, wenn der private Selektor die erwartete, zur Laufzeit validierte ABI aufweist.
- Ein
7 / 7-Test ist nur dann aussagekräftig, wenn bekannt ist, dass die Zielanwendung installiert ist. - Der Tester ruft absichtlich eine undokumentierte private API auf und eignet sich nicht für die Einreichung im App Store.
Referenzen
- Apple iOS 18.5 security content
- NVD: CVE-2025-31207
- Original public SpringBoardServices proof of concept
- rootHide developer documentation
Lizenz
MIT