Retour aux mises à jour
New releaseAug 27, 2026

AppEnumGuard v1.2

CVE-2025-31207 : atténuation et testeur sandboxé pour les jailbreaks rootless et rootHide sur iOS 15–18.4.1.

Partager

AppEnumGuard

AppEnumGuard est un tweak défensif pour le canal latéral d'énumération des applications installées, suivi sous la référence CVE-2025-31207. Il prend en charge les environnements de jailbreak conventionnels rootless et rootHide sur iOS 15.0–18.4.1. Le dépôt contient également une application de test iOS normale et sandboxée qui démontre le résultat vulnérable et vérifie l'atténuation.

CVE-2025-31207

CVE-2025-31207 est une vulnérabilité de divulgation d'informations dans la logique de lancement d'applications FrontBoard d'Apple. Une application sandboxée peut soumettre des identifiants de bundle arbitraires via une fonction privée de lancement SpringBoardServices et distinguer les applications installées des applications absentes à l'aide de codes de retour différents. Cela peut révéler des informations privées sur les applications qu'un utilisateur a installées, y compris les applications bancaires, de messagerie, de sécurité, de sideloading et liées au jailbreak.

Apple décrit le problème comme un problème de logique pouvant permettre à une application d'énumérer les applications installées. Apple l'a corrigé avec des vérifications améliorées dans iOS et iPadOS 18.5. Par conséquent, les systèmes antérieurs à iOS 18.5 restent affectés au niveau de l'OS.

Compatibilité

ComposantCible prise en charge
iOS15.0–18.4.1
JailbreakTout environnement de jailbreak conventionnel rootless ou rootHide
Architecture du bootstrap/paquetrootless / iphoneos-arm64 ; rootHide / iphoneos-arm64e
Architecture de l'appareilarm64 et arm64e (rootless) ; arm64e (rootHide)
PaquetInstaller le paquet correspondant au bootstrap de l'appareil

La compilation par défaut utilise Theos rootless conventionnel et inclut les tranches arm64 et arm64e. La variante rootHide est compilée avec rootHide Theos et contient les chemins de chargeur .jbroot rootHide requis. Les deux paquets déclarent firmware (>= 15.0) et firmware (<< 18.5) : l'atténuation est inutile sur iOS 18.5 et versions ultérieures, où Apple a corrigé CVE-2025-31207.

Le tweak v1.1 côté SpringBoard et le testeur sandboxé ont été vérifiés ensemble sur iOS 17.3.1 build 21D61 avec l'injection désactivée pour le testeur. Le testeur a détecté la fuite avec le tweak retiré et a renvoyé un succès (vert) après l'installation du tweak.

Fonctionnement

La primitive publiée appelle la fonction privée SpringBoardServices SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions. Sur un système vulnérable, elle renvoie des erreurs différentes pour une application installée et une application absente :

  • 9 : la cible existe, mais le lancement est refusé par la politique
  • 7 : la cible n'existe pas

AppEnumGuard 1.1 s'injecte uniquement dans SpringBoard et intercepte la méthode commune de validation de confiance FBSystemService. Lorsqu'une demande de lancement non autorisée renverrait l'erreur de politique de sécurité 3 de FBSOpenApplicationErrorDomain, le tweak la remplace par l'erreur 4 (application introuvable). L'API externe SpringBoardServices renvoie alors 7 pour les cibles installées comme absentes.

Le nombre d'arguments de la méthode privée et l'encodage de type Objective-C sont validés avant l'installation du hook. Si Apple modifie l'ABI, AppEnumGuard échoue en mode ouvert (fail open) au lieu d'intercepter une méthode SpringBoard inconnue.

Changement par rapport à la 1.0

La version 1.0 interceptait SpringBoardServices dans chaque application UIKit. Elle fonctionnait, mais nécessitait une injection dans chaque application protégée ; une application qui désactivait ou détectait l'injection pouvait contourner l'atténuation. La version 1.1 déplace l'application vers SpringBoard, de sorte qu'un seul hook central protège les appelants sans injecter AppEnumGuard dans leurs processus.

Téléchargements des versions

La version 1.2 peut être compilée pour l'un ou l'autre bootstrap :

  • AppEnumGuard_1.2_rootless_iphoneos-arm64.deb — tweak rootless conventionnel
  • AppEnumGuard_1.2_roothide_iphoneos-arm64e.deb — tweak rootHide
  • AppEnumGuardTester_1.2_sandboxed.ipa — application de vérification sandboxée avec icône

Installation et vérification

  1. Installez le .deb correspondant au bootstrap rootless ou rootHide et respringuez.
  2. Installez l'IPA de test à l'aide d'une signature développeur/sideloading normale.
  3. Laissez l'injection d'AppEnumGuard désactivée pour AppEnum Test ; la v1.1 le protège de SpringBoard.
  4. Appuyez sur l'icône d'une application que vous savez installée. Des préréglages sont disponibles pour WhatsApp, YouTube, Spotify, Dopamine, TrollStore et Reddit.

Résultats attendus avec la cible sélectionnée installée :

ÉtatCibleManquantRésultat du testeur
Tweak absent97Rouge / ÉCHEC
Tweak actif77Vert / RÉUSSITE

Le testeur n'affiche du rouge que pour le résultat vulnérable connu 9 / 7 et du vert pour tout autre résultat numérique ; un résultat rouge indique qu'AppEnumGuard n'est pas installé. Les résultats verts sont étiquetés App not detected. Le résultat vulnérable 9 / 7 est étiqueté App detected et AppEnumGuard missing. Ne sélectionnez qu'une application que vous savez installée : 7 / 7 seul ne permet pas de distinguer une atténuation fonctionnelle d'une cible inexistante.

Le testeur inclut également une brève description du projet et un lien cliquable vers ce dépôt GitHub.

Le test sur appareil a reproduit les deux états avec l'injection du testeur désactivée : la désinstallation du tweak a produit le résultat rouge 9 / 7, tandis que l'installation de la v1.1 a produit le résultat vert 7 / 7.

Compiler le tweak

Avec Theos standard, la compilation par défaut est rootless conventionnelle :

cd Tweak
make clean package FINALPACKAGE=1

Pour rootHide, installez rootHide Theos et exécutez :

cd Tweak
THEOS=/path/to/theos-roothide \
  make clean package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=roothide

Compiler l'IPA de test

Le testeur est compilé avec le SDK iPhoneOS de Xcode et ne nécessite ni jailbreak ni entitlements élevés :

./scripts/build-tester-ipa.sh

L'IPA résultant est placé dans dist/. Il est signé ad-hoc afin qu'un installeur puisse le re-signer avec une identité de développement normale. Ne lui accordez pas platform-application ni com.apple.private.security.no-sandbox, car le test est spécifiquement destiné à s'exécuter depuis un bac à sable d'application normal.

Périmètre et limitations

  • Il s'agit d'une atténuation en espace utilisateur pour la primitive SpringBoardServices publiée, et non du correctif FrontBoard complet d'Apple.
  • La version 1.1 ne nécessite pas d'injection dans les applications protégées. Désactiver l'injection globalement ou pour SpringBoard lui-même désactivera l'atténuation.
  • L'implémentation côté serveur est confirmée sur iOS 17.3.1 build 21D61. Sur les autres versions prises en charge, le tweak n'installe son hook que lorsque le sélecteur privé possède l'ABI attendue, validée à l'exécution.
  • Un test 7 / 7 n'a de sens que lorsque l'application cible est connue comme installée.
  • Le testeur appelle intentionnellement une API privée non documentée et ne convient pas à une soumission sur l'App Store.

Références

Licence

MIT

Catégories