
CVE-2025-31207-Mitigation und Sandbox-Tester für rootless- und rootHide-Jailbreaks auf iOS 15–18.4.1.
AppEnumGuard ist ein defensiver Tweak für den Seitenkanal zur Aufzählung installierter Anwendungen, der als CVE-2025-31207 verfolgt wird. Er unterstützt konventionelle 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 Abschwächung verifiziert.
CVE-2025-31207 ist eine Schwachstelle zur Offenlegung von Informationen in der Anwendungsstartlogik von Apples FrontBoard. Eine sandboxed Anwendung kann beliebige Bundle-Identifikatoren über eine private SpringBoardServices-Startfunktion übermitteln und installierte Anwendungen von fehlenden Anwendungen anhand unterschiedlicher Rückgabecodes unterscheiden. Dies kann private Informationen über die Anwendungen offenlegen, die ein Benutzer installiert hat, einschließlich Banking-, Messaging-, Sicherheits-, Sideloading- und Jailbreak-bezogenen Apps.
Apple beschreibt das Problem als ein Logikproblem, das einer Anwendung ermöglichen könnte, installierte Apps aufzuzählen. Apple korrigierte es mit verbesserten Prüfungen in iOS und iPadOS 18.5. Folglich bleiben Systeme älter als iOS 18.5 auf Betriebssystemebene betroffen.
| Komponente | Unterstütztes Ziel |
|---|---|
| iOS | 15.0–18.4.1 |
| Jailbreak | Jede konventionelle 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 konventionelles 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 Abschwächung ist auf iOS 18.5 und neuer unnötig, wo Apple CVE-2025-31207 behoben hat.
Der SpringBoard-seitige v1.1-Tweak 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.
Das veröffentlichte Primitive 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 nichtAppEnumGuard 1.1 injiziert nur in SpringBoard und hookt die gemeinsame FBSystemService-Vertrauensvalidierungsmethode. Wenn eine nicht autorisierte Startanfrage den Sicherheitsrichtlinienfehler 3 von FBSOpenApplicationErrorDomain zurückgeben würde, ändert der Tweak ihn in 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-Typcodierung der privaten Methode werden validiert, bevor der Hook installiert wird. Wenn Apple die ABI ändert, schlägt AppEnumGuard offen fehl, anstatt eine unbekannte SpringBoard-Methode zu hooken.
Version 1.0 hookte SpringBoardServices in jeder UIKit-Anwendung. Das funktionierte, erforderte jedoch die Injektion in jede geschützte App; eine App, die die Injektion deaktivierte oder erkannte, konnte die Abschwächung umgehen. Version 1.1 verlagert die Durchsetzung auf SpringBoard, sodass ein einziger zentraler Hook Aufrufer schützt, ohne AppEnumGuard in ihre Prozesse zu injizieren.
Release 1.2 kann für beide Bootstraps gebaut werden:
AppEnumGuard_1.2_rootless_iphoneos-arm64.deb — konventioneller rootless TweakAppEnumGuard_1.2_roothide_iphoneos-arm64e.deb — rootHide TweakAppEnumGuardTester_1.2_sandboxed.ipa — sandboxed Verifizierungs-App mit Symbol.deb, das zum rootless- oder rootHide-Bootstrap passt, und respringen Sie.Erwartete Ergebnisse mit installiertem ausgewähltem Ziel:
| Zustand | Ziel | Fehlend | Tester-Ergebnis |
|---|---|---|---|
| Tweak nicht vorhanden | 9 | 7 | Rot / FEHLGESCHLAGEN |
| Tweak aktiv | 7 | 7 | Grün / BESTANDEN |
Der Tester meldet grün, wenn die ausgewählte App nicht erkennbar ist, und rot, wenn sie erkennbar ist. Wählen Sie nur eine App aus, von der Sie wissen, dass sie installiert ist: 7 / 7 allein kann eine funktionierende Abschwächung nicht von einem Ziel unterscheiden, das nicht existiert.
Der Gerätetest reproduzierte beide Zustände mit deaktivierter Tester-Injektion: Das Deinstallieren des Tweaks erzeugte das rote 9 / 7-Ergebnis, während die Installation von v1.1 das grüne 7 / 7-Ergebnis erzeugte.
Mit standardmäßigem 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 Folgendes aus:
cd Tweak
THEOS=/path/to/theos-roothide \
make clean package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=roothide
Der Tester wird mit dem iPhoneOS-SDK von Xcode kompiliert und hat keine Jailbreak- oder erhöhten Berechtigungen:
./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ähren Sie ihr nicht platform-application oder com.apple.private.security.no-sandbox, da der Test ausdrücklich dazu gedacht ist, aus einer normalen Anwendungssandbox zu laufen.
7 / 7-Test ist nur aussagekräftig, wenn bekannt ist, dass die Zielanwendung installiert ist.MIT