返回更新列表
新发布Aug 27, 2026

AppEnumGuard v1.2

CVE-2025-31207 缓解措施及沙盒测试工具,适用于 iOS 15–18.4.1 上的 rootless 和 rootHide 越狱。

分享

AppEnumGuard

AppEnumGuard 是一个防御性 tweak,用于缓解已安装应用枚举侧信道问题,该问题被追踪为 CVE-2025-31207。它支持 iOS 15.0–18.4.1 上的常规 rootless 和 rootHide 越狱环境。 该仓库还包含一个普通的沙盒化 iOS 测试应用,用于演示存在漏洞的结果并验证缓解措施。

CVE-2025-31207

CVE-2025-31207 是 Apple FrontBoard 应用启动逻辑中的一个信息泄露漏洞。沙盒化应用可以通过私有的 SpringBoardServices 启动函数提交任意 bundle identifier,并利用不同的返回码区分已安装应用与不存在的应用。这可能泄露用户已安装应用的私密信息,包括银行、消息、安全、侧载和越狱相关应用。

Apple 将该问题描述为一个逻辑问题,可能允许应用枚举已安装应用。Apple 在 iOS 和 iPadOS 18.5 中通过改进检查修复了该问题。因此,低于 iOS 18.5 的系统在操作系统层面仍然受影响。

兼容性

组件支持的目标
iOS15.0–18.4.1
越狱任何常规 rootless 或 rootHide 越狱环境
Bootstrap/包架构rootless / iphoneos-arm64;rootHide / iphoneos-arm64e
设备架构arm64 和 arm64e(rootless);arm64e(rootHide)
包安装与设备 bootstrap 匹配的包

默认构建使用常规 rootless Theos,并包含 arm64 和 arm64e 切片。rootHide 变体使用 rootHide Theos 构建,并包含所需的 rootHide .jbroot loader 路径。两个包均声明 firmware (>= 15.0) 和 firmware (<< 18.5):在 iOS 18.5 及更新版本上不需要该缓解措施,因为 Apple 已修复 CVE-2025-31207。

SpringBoard 侧的 v1.1 tweak 与沙盒化测试器已在 iOS 17.3.1 build 21D61 上共同验证,测试器禁用了注入。测试器在移除 tweak 时检测到泄露,并在安装 tweak 后返回绿色通过。

工作原理

已公开的利用原语会调用私有 SpringBoardServices 函数 SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions。在存在漏洞的系统上,它对已安装应用和不存在的应用返回不同错误:

  • 9:目标存在,但启动被策略拒绝
  • 7:目标不存在

AppEnumGuard 1.1 仅注入 SpringBoard,并 hook 通用的 FBSystemService 信任验证方法。当未授权的启动请求本应返回 FBSOpenApplicationErrorDomain 安全策略错误 3 时,该 tweak 将其改为应用未找到错误 4。随后外层 SpringBoardServices API 对已安装和不存在的目标都返回 7。

在安装 hook 之前,会验证私有方法的参数数量和 Objective-C 类型编码。如果 Apple 更改 ABI,AppEnumGuard 会失败开放,而不是 hook 未知的 SpringBoard 方法。

相对 1.0 的变更

版本 1.0 在每个 UIKit 应用内 hook SpringBoardServices。它有效,但需要注入到每个受保护的应用中;禁用或检测到注入的应用可以绕过该缓解措施。版本 1.1 将强制执行移至 SpringBoard,因此单个中心 hook 即可保护调用方,而无需将 AppEnumGuard 注入其进程。

发布下载

Release 1.2 可为任一 bootstrap 构建:

  • AppEnumGuard_1.2_rootless_iphoneos-arm64.deb — 常规 rootless tweak
  • AppEnumGuard_1.2_roothide_iphoneos-arm64e.deb — rootHide tweak
  • AppEnumGuardTester_1.2_sandboxed.ipa — 带图标的沙盒化验证应用

安装与验证

  1. 安装与 rootless 或 rootHide bootstrap 匹配的 .deb 并重新启动 SpringBoard。
  2. 使用普通的开发者/侧载签名安装测试器 IPA。
  3. 对 AppEnum Test 保持 AppEnumGuard 注入禁用;v1.1 会保护它 免受 SpringBoard 影响。
  4. 点击一个你确认已安装的应用图标。预设可用于 WhatsApp、YouTube、Spotify、Dopamine、TrollStore 和 Reddit。

在已安装所选目标时的预期结果:

状态目标缺失测试器结果
插件未安装97红色 / 失败
插件已启用77绿色 / 通过

测试器仅对已知存在漏洞的 9 / 7 结果报告红色,对其他所有数值结果 报告绿色;红色结果表示 AppEnumGuard 未安装。 绿色结果标记为 未检测到应用。存在漏洞的 9 / 7 结果 标记为 检测到应用 和 AppEnumGuard 缺失。 仅选择你确认已安装的应用:仅凭 7 / 7 无法区分有效的缓解措施与不存在的目标。

测试器还包含简短的项目描述以及指向 此 GitHub 仓库的可点击链接。

设备测试在禁用测试器注入的情况下复现了两种状态: 卸载插件产生了红色的 9 / 7 结果,而安装 v1.1 产生了绿色的 7 / 7 结果。

构建插件

使用标准 Theos 时,默认构建为常规 rootless:

cd Tweak
make clean package FINALPACKAGE=1

对于 rootHide,请安装 rootHide Theos 并运行:

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

构建测试器 IPA

测试器使用 Xcode 的 iPhoneOS SDK 编译,不需要越狱或提升权限的 entitlements:

./scripts/build-tester-ipa.sh

生成的 IPA 位于 dist/ 中。它采用 ad-hoc 签名,因此安装器可以使用常规开发身份重新签名。不要授予它 platform-application 或 com.apple.private.security.no-sandbox,因为该测试专门设计为从普通应用程序沙盒中运行。

范围与限制

  • 这是针对已公开的 SpringBoardServices 原语(primitive)的用户态缓解措施,并非 Apple 完整的 FrontBoard 补丁。
  • 版本 1.1 不要求注入受保护的应用程序。全局禁用注入或对 SpringBoard 本身禁用注入都会使该缓解措施失效。
  • 服务端实现已在 iOS 17.3.1 build 21D61 上确认。在其他受支持的版本上,仅当私有选择器具有预期的、经运行时验证的 ABI 时,该 tweak 才会安装其 hook。
  • 仅当已知目标应用程序已安装时,7 / 7 测试才有意义。
  • 测试器有意调用未公开的私有 API,因此不适合提交至 App Store。

参考资料

许可证

MIT

分类