Назад к обновлениям
New releaseAug 27, 2026

AppEnumGuard v1.2

CVE-2025-31207 mitigation и песочница-тестер для джейлбрейков rootless и rootHide на iOS 15–18.4.1.

Поделиться

AppEnumGuard

AppEnumGuard — это защитный твик для побочного канала перечисления установленных приложений, отслеживаемого как CVE-2025-31207. Он поддерживает стандартные rootless- и rootHide-среды джейлбрейка на iOS 15.0–18.4.1. Репозиторий также содержит обычное тестовое iOS-приложение в песочнице, которое демонстрирует уязвимый результат и проверяет устранение уязвимости.

CVE-2025-31207

CVE-2025-31207 — это уязвимость раскрытия информации в логике запуска приложений FrontBoard от Apple. Приложение в песочнице может передавать произвольные идентификаторы пакетов через приватную функцию запуска SpringBoardServices и отличать установленные приложения от отсутствующих по разным кодам возврата. Это может раскрывать приватную информацию об установленных у пользователя приложениях, включая банковские, мессенджеры, приложения безопасности, сайдлоадинга и связанные с джейлбрейком.

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 и содержит необходимые пути загрузчика .jbroot rootHide. Оба пакета объявляют firmware (>= 15.0) и firmware (<< 18.5): на iOS 18.5 и новее устранение уязвимости не требуется, поскольку Apple исправила CVE-2025-31207.

Твик v1.1 для стороны SpringBoard и тестер в песочнице были проверены вместе на iOS 17.3.1 сборка 21D61 с отключённой инъекцией для тестера. Тестер обнаружил утечку при удалённом твике и вернул зелёный результат после установки твика.

Как это работает

Опубликованный примитив вызывает приватную функцию SpringBoardServices SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions. На уязвимой системе она возвращает разные ошибки для установленного приложения и отсутствующего приложения:

  • 9: цель существует, но запуск запрещён политикой
  • 7: цель не существует

AppEnumGuard 1.1 внедряется только в SpringBoard и перехватывает общий метод проверки доверия FBSystemService. Когда неавторизованный запрос на запуск вернул бы ошибку политики безопасности 3 в FBSOpenApplicationErrorDomain, твик меняет её на ошибку «приложение не найдено» 4. Внешний API SpringBoardServices затем возвращает 7 как для установленных, так и для отсутствующих целей.

Количество аргументов приватного метода и кодировка типов Objective-C проверяются перед установкой хука. Если Apple изменит ABI, AppEnumGuard завершится безопасно (fail open), вместо того чтобы перехватывать неизвестный метод SpringBoard.

Изменения по сравнению с 1.0

Версия 1.0 перехватывала SpringBoardServices внутри каждого UIKit-приложения. Это работало, но требовало инъекции в каждое защищаемое приложение; приложение, которое отключало или обнаруживало инъекцию, могло обойти защиту. Версия 1.1 переносит принудительное применение в SpringBoard, поэтому один центральный хук защищает вызывающие стороны без внедрения AppEnumGuard в их процессы.

Загрузки релиза

Релиз 1.2 может быть собран для любого bootstrap:

  • AppEnumGuard_1.2_rootless_iphoneos-arm64.deb — стандартный rootless-твик
  • AppEnumGuard_1.2_roothide_iphoneos-arm64e.deb — rootHide-твик
  • AppEnumGuardTester_1.2_sandboxed.ipa — приложение для проверки в песочнице со значком

Установка и проверка

  1. Установите .deb, соответствующий rootless- или rootHide-bootstrap, и выполните respring.
  2. Установите тестовый IPA с обычной подписью разработчика/для sideloading.
  3. Оставьте инъекцию AppEnumGuard отключённой для AppEnum Test; v1.1 защищает его от SpringBoard.
  4. Нажмите на значок приложения, которое, как вы знаете, установлено. Доступны пресеты для WhatsApp, YouTube, Spotify, Dopamine, TrollStore и Reddit.

Ожидаемые результаты при установленной выбранной цели:

СостояниеЦельОтсутствуетРезультат тестера
Твик отсутствует97Красный / FAIL
Твик активен77Зелёный / PASS

Тестер сообщает красный только для известного уязвимого результата 9 / 7 и зелёный для любого другого числового результата; красный результат означает, что AppEnumGuard не установлен. Зелёные результаты помечаются как App not detected. Уязвимый результат 9 / 7 помечается как App detected и AppEnumGuard missing. Выбирайте только приложение, которое, как вы знаете, установлено: только 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

Тестовое приложение компилируется с помощью iPhoneOS SDK из Xcode и не требует джейлбрейка или повышенных прав (entitlements):

./scripts/build-tester-ipa.sh

Полученный IPA-файл помещается в dist/. Он подписан ad-hoc, поэтому установщик может переподписать его обычным идентификатором разработки. Не предоставляйте ему platform-application или com.apple.private.security.no-sandbox, поскольку тест специально предназначен для запуска из обычной песочницы приложения.

Область применения и ограничения

  • Это митигация в пользовательском пространстве для опубликованного примитива SpringBoardServices, а не полный патч FrontBoard от Apple.
  • Версия 1.1 не требует инъекции в защищённые приложения. Отключение инъекции глобально или для самого SpringBoard отключит митигацию.
  • Серверная реализация подтверждена на iOS 17.3.1 сборка 21D61. На других поддерживаемых версиях твик устанавливает свой хук только тогда, когда приватный селектор имеет ожидаемый ABI, проверенный во время выполнения.
  • Результат 7 / 7 в тесте имеет смысл только тогда, когда известно, что целевое приложение установлено.
  • Тестер намеренно вызывает недокументированный приватный API и не подходит для отправки в App Store.

Ссылки

Лицензия

MIT

Категории