
AppEnumGuard v1.2
CVE-2025-31207 mitigation и песочница-тестер для джейлбрейков rootless и rootHide на iOS 15–18.4.1.
AppEnumGuard
AppEnumGuard — это защитная настройка (tweak) для побочного канала перечисления установленных приложений, отслеживаемого как 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 остаются затронутыми на уровне ОС.
Совместимость
| Компонент | Поддерживаемая цель |
|---|---|
| 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 и содержит необходимые пути загрузчика .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 безопасно откажется от перехвата неизвестного метода SpringBoard, а не вызовет сбой.
Изменение по сравнению с 1.0
Версия 1.0 перехватывала SpringBoardServices внутри каждого приложения UIKit. Это работало, но требовало инъекции в каждое защищаемое приложение; приложение, отключающее или обнаруживающее инъекцию, могло обойти смягчение. Версия 1.1 переносит контроль в SpringBoard, поэтому один центральный хук защищает вызывающих без внедрения AppEnumGuard в их процессы.
Загрузки релизов
Релиз 1.2 можно собрать для любого бутстрапа:
AppEnumGuard_1.2_rootless_iphoneos-arm64.deb— обычный твик rootlessAppEnumGuard_1.2_roothide_iphoneos-arm64e.deb— твик rootHideAppEnumGuardTester_1.2_sandboxed.ipa— песочное проверочное приложение с иконкой
Установка и проверка
- Установите
.deb, соответствующий бутстрапу rootless или rootHide, и выполните респринг. - Установите тестовый IPA с обычной подписью разработчика/сайдлоадинга.
- Оставьте инъекцию AppEnumGuard отключённой для AppEnum Test; 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
Тестер компилируется с iPhoneOS SDK от Xcode и не имеет джейлбрейка или повышенных привилегий:
./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.
Ссылки
- Содержимое безопасности Apple iOS 18.5
- NVD: CVE-2025-31207
- Оригинальная публичная proof of concept SpringBoardServices
- Документация разработчика rootHide
Лицензия
MIT