Volver a actualizaciones
Nuevo releaseAug 27, 2026

AppEnumGuard v1.2

CVE-2025-31207 mitigación y probador en sandbox para jailbreaks rootless y rootHide en iOS 15–18.4.1.

Compartir

AppEnumGuard

AppEnumGuard es un tweak defensivo para el canal lateral de enumeración de aplicaciones instaladas registrado como CVE-2025-31207. Es compatible con entornos de jailbreak convencionales rootless y rootHide en iOS 15.0–18.4.1. El repositorio también contiene una aplicación de prueba normal para iOS en sandbox que demuestra el resultado vulnerable y verifica la mitigación.

CVE-2025-31207

CVE-2025-31207 es una vulnerabilidad de divulgación de información en la lógica de lanzamiento de aplicaciones FrontBoard de Apple. Una aplicación en sandbox puede enviar identificadores de bundle arbitrarios a través de una función privada de lanzamiento de SpringBoardServices y distinguir las aplicaciones instaladas de las ausentes mediante distintos códigos de retorno. Esto puede revelar información privada sobre las aplicaciones que un usuario tiene instaladas, incluidas aplicaciones bancarias, de mensajería, de seguridad, de sideloading y relacionadas con jailbreak.

Apple describe el problema como un fallo de lógica que podría permitir a una aplicación enumerar las apps instaladas. Apple lo corrigió con comprobaciones mejoradas en iOS y iPadOS 18.5. En consecuencia, los sistemas anteriores a iOS 18.5 siguen afectados a nivel de sistema operativo.

Compatibilidad

ComponenteObjetivo compatible
iOS15.0–18.4.1
JailbreakCualquier entorno de jailbreak convencional rootless o rootHide
Arquitectura de bootstrap/paqueterootless / iphoneos-arm64; rootHide / iphoneos-arm64e
Arquitectura del dispositivoarm64 y arm64e (rootless); arm64e (rootHide)
PaqueteInstalar el paquete que coincida con el bootstrap del dispositivo

La compilación predeterminada usa Theos rootless convencional e incluye slices arm64 y arm64e. La variante rootHide se compila con rootHide Theos y contiene las rutas de cargador .jbroot requeridas por rootHide. Ambos paquetes declaran firmware (>= 15.0) y firmware (<< 18.5): la mitigación no es necesaria en iOS 18.5 y versiones posteriores, donde Apple corrigió CVE-2025-31207.

El tweak v1.1 del lado de SpringBoard y el tester en sandbox se verificaron juntos en iOS 17.3.1 build 21D61 con la inyección deshabilitada para el tester. El tester detectó la fuga con el tweak eliminado y devolvió un resultado correcto (verde) tras instalar el tweak.

Cómo funciona

La primitiva publicada llama a la función privada de SpringBoardServices SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions. En un sistema vulnerable devuelve errores distintos para una aplicación instalada y una aplicación ausente:

  • 9: el objetivo existe, pero el lanzamiento está denegado por la política
  • 7: el objetivo no existe

AppEnumGuard 1.1 se inyecta únicamente en SpringBoard e intercepta el método común de validación de confianza FBSystemService. Cuando una solicitud de lanzamiento no autorizada devolvería el error de política de seguridad 3 de FBSOpenApplicationErrorDomain, el tweak lo cambia al error 4 de aplicación no encontrada. La API externa de SpringBoardServices devuelve entonces 7 tanto para objetivos instalados como ausentes.

El número de argumentos del método privado y la codificación de tipos de Objective-C se validan antes de instalar el hook. Si Apple cambia la ABI, AppEnumGuard falla de forma abierta (fail open) en lugar de interceptar un método desconocido de SpringBoard.

Cambios respecto a 1.0

La versión 1.0 interceptaba SpringBoardServices dentro de cada aplicación UIKit. Funcionaba, pero requería inyección en cada app protegida; una app que deshabilitara o detectara la inyección podía eludir la mitigación. La versión 1.1 traslada la aplicación de la medida a SpringBoard, de modo que un único hook central protege a los llamadores sin inyectar AppEnumGuard en sus procesos.

Descargas de la versión

La versión 1.2 puede compilarse para cualquiera de los dos bootstraps:

  • AppEnumGuard_1.2_rootless_iphoneos-arm64.deb — tweak rootless convencional
  • AppEnumGuard_1.2_roothide_iphoneos-arm64e.deb — tweak rootHide
  • AppEnumGuardTester_1.2_sandboxed.ipa — aplicación de verificación en sandbox con icono

Instalación y verificación

  1. Instala el .deb correspondiente al bootstrap rootless o rootHide y respring.
  2. Instala el IPA del tester usando una firma normal de desarrollador/sideloading.
  3. Deja la inyección de AppEnumGuard desactivada para AppEnum Test; la v1.1 lo protege de SpringBoard.
  4. Toca el icono de una app que sepas que está instalada. Hay presets disponibles para WhatsApp, YouTube, Spotify, Dopamine, TrollStore y Reddit.

Resultados esperados con el objetivo seleccionado instalado:

EstadoObjetivoFaltanteResultado del tester
Tweak ausente97Rojo / FAIL
Tweak activo77Verde / PASS

El tester informa en rojo solo para el resultado vulnerable conocido 9 / 7 y en verde para cualquier otro resultado numérico; un resultado en rojo indica que AppEnumGuard no está instalado. Los resultados en verde se etiquetan como App not detected. El resultado vulnerable 9 / 7 se etiqueta como App detected y AppEnumGuard missing. Selecciona solo una app que sepas que está instalada: 7 / 7 por sí solo no puede distinguir una mitigación funcional de un objetivo que no existe.

El tester también incluye una breve descripción del proyecto y un enlace clicable a este repositorio de GitHub.

La prueba en dispositivo reprodujo ambos estados con la inyección del tester desactivada: desinstalar el tweak produjo el resultado rojo 9 / 7, mientras que instalar la v1.1 produjo el resultado verde 7 / 7.

Compilar el tweak

Con Theos estándar, la compilación por defecto es rootless convencional:

cd Tweak
make clean package FINALPACKAGE=1

Para rootHide, instala rootHide Theos y ejecuta:

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

Compilar el IPA de prueba

El tester se compila con el SDK de iPhoneOS de Xcode y no tiene jailbreak ni entitlements elevados:

./scripts/build-tester-ipa.sh

El IPA resultante se coloca en dist/. Está firmado ad-hoc para que un instalador pueda volver a firmarlo con una identidad de desarrollo normal. No le conceda platform-application ni com.apple.private.security.no-sandbox, ya que la prueba está específicamente pensada para ejecutarse desde un sandbox de aplicación normal.

Alcance y limitaciones

  • Esta es una mitigación en espacio de usuario para la primitiva publicada de SpringBoardServices, no el parche completo de FrontBoard de Apple.
  • La versión 1.1 no requiere inyección en aplicaciones protegidas. Deshabilitar la inyección de forma global o para SpringBoard mismo deshabilitará la mitigación.
  • La implementación del lado del servidor está confirmada en iOS 17.3.1 build 21D61. En otras versiones compatibles, el tweak instala su hook solo cuando el selector privado tiene la ABI esperada validada en tiempo de ejecución.
  • Una prueba 7 / 7 solo es significativa cuando se sabe que la aplicación objetivo está instalada.
  • El tester llama intencionalmente a una API privada no documentada y no es apto para su envío a la App Store.

Referencias

Licencia

MIT

Categorías