Voltar às atualizações
New releaseAug 27, 2026

AppEnumGuard v1.2

CVE-2025-31207 mitigação e testador em sandbox para jailbreaks rootless e rootHide no iOS 15–18.4.1.

Compartilhar

AppEnumGuard

AppEnumGuard é um tweak defensivo para o canal lateral de enumeração de aplicações instaladas registrado como CVE-2025-31207. Ele suporta ambientes convencionais de jailbreak rootless e rootHide no iOS 15.0–18.4.1. O repositório também contém uma aplicação de teste iOS normal em sandbox que demonstra o resultado vulnerável e verifica a mitigação.

CVE-2025-31207

CVE-2025-31207 é uma vulnerabilidade de divulgação de informações na lógica de lançamento de aplicações FrontBoard da Apple. Uma aplicação em sandbox pode enviar identificadores de bundle arbitrários através de uma função privada de lançamento do SpringBoardServices e distinguir aplicações instaladas de aplicações ausentes usando diferentes códigos de retorno. Isso pode revelar informações privadas sobre as aplicações que um usuário tem instaladas, incluindo aplicações bancárias, de mensagens, de segurança, de sideloading e relacionadas a jailbreak.

A Apple descreve o problema como um problema de lógica que poderia permitir que uma aplicação enumerasse as aplicações instaladas. A Apple corrigiu-o com verificações aprimoradas no iOS e iPadOS 18.5. Consequentemente, sistemas anteriores ao iOS 18.5 permanecem afetados no nível do SO.

Compatibilidade

ComponenteAlvo suportado
iOS15.0–18.4.1
JailbreakQualquer ambiente convencional de jailbreak rootless ou rootHide
Arquitetura de bootstrap/pacoterootless / iphoneos-arm64; rootHide / iphoneos-arm64e
Arquitetura do dispositivoarm64 e arm64e (rootless); arm64e (rootHide)
PacoteInstale o pacote correspondente ao bootstrap do dispositivo

A compilação padrão usa Theos rootless convencional e inclui slices arm64 e arm64e. A variante rootHide é compilada com rootHide Theos e contém os caminhos de loader .jbroot necessários do rootHide. Ambos os pacotes declaram firmware (>= 15.0) e firmware (<< 18.5): a mitigação é desnecessária no iOS 18.5 e mais recente, onde a Apple corrigiu o CVE-2025-31207.

O tweak v1.1 do lado do SpringBoard e o testador em sandbox foram verificados juntos no iOS 17.3.1 build 21D61 com a injeção desativada para o testador. O testador detectou o vazamento com o tweak removido e retornou um resultado positivo (verde) após a instalação do tweak.

Como funciona

A primitiva publicada chama a função privada do SpringBoardServices SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions. Em um sistema vulnerável, ela retorna erros diferentes para uma aplicação instalada e uma aplicação ausente:

  • 9: o alvo existe, mas o lançamento é negado por política
  • 7: o alvo não existe

O AppEnumGuard 1.1 injeta apenas no SpringBoard e faz hook do método comum de validação de confiança FBSystemService. Quando uma solicitação de lançamento não autorizada retornaria o erro de política de segurança 3 do FBSOpenApplicationErrorDomain, o tweak o altera para o erro 4 de aplicação não encontrada. A API externa do SpringBoardServices então retorna 7 tanto para alvos instalados quanto para alvos ausentes.

A contagem de argumentos do método privado e a codificação de tipos Objective-C são validadas antes da instalação do hook. Se a Apple alterar a ABI, o AppEnumGuard falha aberto em vez de fazer hook de um método desconhecido do SpringBoard.

Mudança em relação à 1.0

A versão 1.0 fazia hook do SpringBoardServices dentro de cada aplicação UIKit. Funcionava, mas exigia injeção em cada aplicação a ser protegida; uma aplicação que desativasse ou detectasse a injeção poderia contornar a mitigação. A versão 1.1 move a aplicação da política para o SpringBoard, de modo que um único hook central protege os chamadores sem injetar o AppEnumGuard em seus processos.

Downloads de lançamento

A versão 1.2 pode ser compilada para qualquer um 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 — aplicação de verificação em sandbox com ícone

Instalar e verificar

  1. Instale o .deb correspondente ao bootstrap rootless ou rootHide e faça respring.
  2. Instale o IPA do testador usando uma assinatura normal de desenvolvedor/sideloading.
  3. Deixe a injeção do AppEnumGuard desativada para o AppEnum Test; a v1.1 o protege do SpringBoard.
  4. Toque no ícone de um app que você sabe estar instalado. Há presets disponíveis para WhatsApp, YouTube, Spotify, Dopamine, TrollStore e Reddit.

Resultados esperados com o alvo selecionado instalado:

EstadoAlvoAusenteResultado do testador
Tweak ausente97Vermelho / FAIL
Tweak ativo77Verde / PASS

O testador reporta vermelho apenas para o resultado vulnerável conhecido 9 / 7 e verde para qualquer outro resultado numérico; um resultado vermelho indica que o AppEnumGuard não está instalado. Resultados verdes são rotulados como App not detected. O resultado vulnerável 9 / 7 é rotulado como App detected e AppEnumGuard missing. Selecione apenas um app que você sabe estar instalado: 7 / 7 sozinho não consegue distinguir uma mitigação funcional de um alvo que não existe.

O testador também inclui uma breve descrição do projeto e um link clicável para este repositório do GitHub.

O teste no dispositivo reproduziu ambos os estados com a injeção do testador desativada: desinstalar o tweak produziu o resultado vermelho 9 / 7, enquanto instalar a v1.1 produziu o resultado verde 7 / 7.

Compilar o tweak

Com o Theos padrão, a compilação padrão é rootless convencional:

cd Tweak
make clean package FINALPACKAGE=1

Para o rootHide, instale o rootHide Theos e execute:

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

Compilar o IPA de teste

O testador é compilado com o SDK iPhoneOS do Xcode e não possui jailbreak nem entitlements elevados:

./scripts/build-tester-ipa.sh

O IPA resultante é colocado em dist/. Ele é assinado ad-hoc para que um instalador possa reassiná-lo com uma identidade de desenvolvimento normal. Não lhe conceda platform-application nem com.apple.private.security.no-sandbox, pois o teste destina-se especificamente a ser executado a partir de um sandbox de aplicação normal.

Escopo e limitações

  • Esta é uma mitigação em espaço de usuário para a primitiva publicada do SpringBoardServices, não o patch completo do FrontBoard da Apple.
  • A versão 1.1 não requer injeção em aplicações protegidas. Desativar a injeção globalmente ou para o próprio SpringBoard desativará a mitigação.
  • A implementação do lado do servidor está confirmada no iOS 17.3.1 build 21D61. Em outras versões suportadas, o tweak instala seu hook apenas quando o seletor privado possui a ABI esperada, validada em tempo de execução.
  • Um teste 7 / 7 só é significativo quando se sabe que a aplicação alvo está instalada.
  • O testador chama intencionalmente uma API privada não documentada e não é adequado para submissão à App Store.

Referências

Licença

MIT

Categorias