
AppEnumGuard v1.2
CVE-2025-31207の緩和策と、iOS 15〜18.4.1のrootlessおよびrootHide脱獄向けサンドボックス化テスター。
AppEnumGuard
AppEnumGuard は、CVE-2025-31207 として追跡されているインストール済みアプリケーション列挙のサイドチャネルに対する防御用ツイークです。iOS 15.0〜18.4.1 の従来の rootless および rootHide 脱獄環境に対応しています。 このリポジトリには、脆弱な結果を実証し、緩和策を検証する通常のサンドボックス化された iOS テストアプリケーションも含まれています。
CVE-2025-31207
CVE-2025-31207 は、Apple の FrontBoard アプリケーション起動ロジックにおける情報漏洩の脆弱性です。サンドボックス化されたアプリケーションは、プライベートな SpringBoardServices 起動関数を通じて任意のバンドル識別子を送信し、異なるリターンコードを使用してインストール済みアプリケーションと存在しないアプリケーションを区別できます。これにより、銀行、メッセージング、セキュリティ、サイドローディング、脱獄関連アプリなど、ユーザーがインストールしたアプリケーションに関するプライベート情報が明らかになる可能性があります。
Apple はこの問題を、アプリケーションがインストール済みアプリを列挙できる可能性があるロジックの問題として説明しています。Apple は iOS および iPadOS 18.5 でチェックを改善して修正しました。その結果、iOS 18.5 より前のシステムは OS レベルで影響を受け続けます。
互換性
| コンポーネント | 対応ターゲット |
|---|---|
| iOS | 15.0〜18.4.1 |
| 脱獄 | 従来の rootless または rootHide 脱獄環境 |
| ブートストラップ/パッケージアーキテクチャ | rootless / iphoneos-arm64; rootHide / iphoneos-arm64e |
| デバイスアーキテクチャ | arm64 および arm64e (rootless); arm64e (rootHide) |
| パッケージ | デバイスのブートストラップに一致するパッケージをインストール |
デフォルトのビルドは従来の rootless Theos を使用し、arm64 および arm64e スライスを含みます。rootHide バリアントは rootHide Theos でビルドされ、必要な rootHide .jbroot ローダーパスを含みます。両方のパッケージは firmware (>= 15.0) および firmware (<< 18.5) を宣言しています。Apple が CVE-2025-31207 を修正した iOS 18.5 以降では緩和策は不要です。
SpringBoard 側の v1.1 ツイークとサンドボックス化されたテスターは、テスターのインジェクションを無効にした状態で iOS 17.3.1 ビルド 21D61 で一緒に検証されました。テスターはツイークを削除した状態でリークを検出し、ツイークをインストールした後に緑色の合格を返しました。
仕組み
公開されたプリミティブは、プライベートな SpringBoardServices 関数 SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions を呼び出します。脆弱なシステムでは、インストール済みアプリケーションと存在しないアプリケーションで異なるエラーを返します:
9: ターゲットは存在するが、ポリシーにより起動が拒否される7: ターゲットが存在しない
AppEnumGuard 1.1 は SpringBoard にのみインジェクションし、一般的な FBSystemService 信頼検証メソッドをフックします。不正な起動リクエストが FBSOpenApplicationErrorDomain セキュリティポリシーエラー 3 を返す場合、ツイークはそれをアプリケーション未検出エラー 4 に変更します。外側の SpringBoardServices API は、インストール済みと存在しないターゲットの両方に対して 7 を返します。
プライベートメソッドの引数数と Objective-C タイプエンコーディングは、フックがインストールされる前に検証されます。Apple が ABI を変更した場合、AppEnumGuard は未知の SpringBoard メソッドをフックする代わりにフェイルオープンします。
1.0 からの変更点
バージョン 1.0 は、すべての UIKit アプリケーション内で SpringBoardServices をフックしていました。機能しましたが、保護されるすべてのアプリへのインジェクションが必要でした。インジェクションを無効化または検出するアプリは、緩和策をバイパスできました。バージョン 1.1 では強制を SpringBoard に移し、単一の中央フックが AppEnumGuard をプロセスにインジェクションせずに呼び出し元を保護します。
リリースダウンロード
リリース 1.2 は、いずれかのブートストラップ用にビルドできます:
AppEnumGuard_1.2_rootless_iphoneos-arm64.deb— 従来の rootless ツイークAppEnumGuard_1.2_roothide_iphoneos-arm64e.deb— rootHide ツイークAppEnumGuardTester_1.2_sandboxed.ipa— アイコン付きサンドボックス化検証アプリ
インストールと検証
- rootless または rootHide ブートストラップに一致する
.debをインストールし、リースプリングします。 - 通常の開発者/サイドローディング署名を使用してテスター IPA をインストールします。
- AppEnum Test の AppEnumGuard インジェクションを無効のままにします。v1.1 は SpringBoard から保護します。
- インストールされていることがわかっているアプリの WhatsApp、YouTube、または Spotify アイコンをタップします。
選択したターゲットがインストールされている場合の期待される結果:
| 状態 | ターゲット | 存在しない | テスター結果 | |---|---|---|---:|---:|---| | ツイークなし | 9 | 7 | 赤 / FAIL | | ツイーク有効 | 7 | 7 | 緑 / PASS |
テスターは、選択したアプリが検出できない場合に緑を報告し、検出できる場合に赤を報告します。インストールされていることがわかっているアプリのみを選択してください。7 / 7 だけでは、機能する緩和策と存在しないターゲットを区別できません。
デバイステストでは、テスターのインジェクションを無効にして両方の状態を再現しました。ツイークをアンインストールすると赤の 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 でコンパイルされ、脱獄や昇格された権限はありません:
./scripts/build-tester-ipa.sh
結果の IPA は dist/ に配置されます。アドホック署名されているため、インストーラーは通常の開発 ID で再署名できます。テストは通常のアプリケーションサンドボックスから実行することを意図しているため、platform-application や com.apple.private.security.no-sandbox を付与しないでください。
範囲と制限
- これは公開された SpringBoardServices プリミティブに対するユーザースペースの緩和策であり、Apple の完全な FrontBoard パッチではありません。
- バージョン 1.1 は保護されたアプリケーションへのインジェクションを必要としません。グローバルまたは SpringBoard 自体のインジェクションを無効にすると、緩和策が無効になります。
- サーバー側の実装は iOS 17.3.1 ビルド 21D61 で確認されています。他のサポート対象バージョンでは、プライベートセレクターが期待されるランタイム検証済み ABI を持つ場合にのみ、ツイークはフックをインストールします。
7 / 7テストは、ターゲットアプリケーションがインストールされていることがわかっている場合にのみ意味があります。- テスターは意図的に文書化されていないプライベート API を呼び出しており、App Store への提出には適していません。
参照
ライセンス
MIT