
AppEnumGuard v1.2
CVE-2025-31207 शमन और iOS 15–18.4.1 पर rootless और rootHide जेलब्रेक के लिए सैंडबॉक्स्ड परीक्षक।
AppEnumGuard
AppEnumGuard, इंस्टॉल किए गए एप्लिकेशन की गणना (enumeration) से जुड़े साइड चैनल के लिए एक रक्षात्मक ट्वीक है, जिसे CVE-2025-31207 के रूप में ट्रैक किया गया है। यह iOS 15.0–18.4.1 पर पारंपरिक rootless और rootHide जेलब्रेक वातावरण का समर्थन करता है। रिपॉज़िटरी में एक सामान्य सैंडबॉक्स्ड iOS परीक्षण एप्लिकेशन भी शामिल है जो भेद्य परिणाम को प्रदर्शित करता है और शमन (mitigation) को सत्यापित करता है।
CVE-2025-31207
CVE-2025-31207, Apple के FrontBoard एप्लिकेशन-लॉन्चिंग लॉजिक में एक सूचना-प्रकटीकरण (information-disclosure) भेद्यता है। एक सैंडबॉक्स्ड एप्लिकेशन एक निजी SpringBoardServices लॉन्च फ़ंक्शन के माध्यम से मनमाने बंडल पहचानकर्ता (bundle identifiers) सबमिट कर सकता है और विभिन्न रिटर्न कोड का उपयोग करके इंस्टॉल किए गए एप्लिकेशन को अनुपस्थित एप्लिकेशन से अलग कर सकता है। यह उपयोगकर्ता द्वारा इंस्टॉल किए गए एप्लिकेशन के बारे में निजी जानकारी प्रकट कर सकता है, जिसमें बैंकिंग, मैसेजिंग, सुरक्षा, साइडलोडिंग और जेलब्रेक-संबंधित ऐप्स शामिल हैं।
Apple इस समस्या को एक लॉजिक समस्या के रूप में वर्णित करता है जो किसी एप्लिकेशन को इंस्टॉल किए गए ऐप्स की गणना करने दे सकती है। Apple ने iOS और iPadOS 18.5 में बेहतर जाँच के साथ इसे ठीक किया। परिणामस्वरूप, iOS 18.5 से पहले के सिस्टम OS स्तर पर प्रभावित रहते हैं।
संगतता
| घटक | समर्थित लक्ष्य |
|---|---|
| iOS | 15.0–18.4.1 |
| जेलब्रेक | कोई भी पारंपरिक rootless या rootHide जेलब्रेक वातावरण |
| Bootstrap/पैकेज आर्किटेक्चर | rootless / iphoneos-arm64; rootHide / iphoneos-arm64e |
| डिवाइस आर्किटेक्चर | arm64 और arm64e (rootless); arm64e (rootHide) |
| पैकेज | डिवाइस के bootstrap से मेल खाने वाला पैकेज इंस्टॉल करें |
डिफ़ॉल्ट बिल्ड पारंपरिक rootless Theos का उपयोग करता है और इसमें arm64 और arm64e स्लाइस शामिल हैं। rootHide संस्करण rootHide Theos के साथ बनाया गया है और इसमें आवश्यक rootHide .jbroot लोडर पथ शामिल हैं। दोनों पैकेज firmware (>= 15.0) और
firmware (<< 18.5) घोषित करते हैं: iOS 18.5 और उससे नए संस्करणों पर शमन अनावश्यक है, जहाँ Apple ने CVE-2025-31207 को ठीक किया है।
SpringBoard-पक्षीय v1.1 ट्वीक और सैंडबॉक्स्ड टेस्टर को iOS 17.3.1 बिल्ड 21D61 पर एक साथ सत्यापित किया गया, जिसमें टेस्टर के लिए इंजेक्शन अक्षम था। टेस्टर ने ट्वीक हटाए जाने पर लीक का पता लगाया और ट्वीक इंस्टॉल होने के बाद हरा पास लौटाया।
यह कैसे काम करता है
प्रकाशित प्रिमिटिव निजी SpringBoardServices फ़ंक्शन
SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions को कॉल करता है। भेद्य सिस्टम पर यह इंस्टॉल किए गए एप्लिकेशन और अनुपस्थित एप्लिकेशन के लिए अलग-अलग त्रुटियाँ लौटाता है:
9: लक्ष्य मौजूद है, लेकिन नीति द्वारा लॉन्च अस्वीकृत है7: लक्ष्य मौजूद नहीं है
AppEnumGuard 1.1 केवल SpringBoard में इंजेक्ट करता है और सामान्य
FBSystemService ट्रस्ट-सत्यापन विधि को हुक करता है। जब कोई अनधिकृत लॉन्च अनुरोध FBSOpenApplicationErrorDomain सुरक्षा-नीति त्रुटि 3 लौटाएगा, तो ट्वीक इसे एप्लिकेशन-नहीं-मिला त्रुटि 4 में बदल देता है। बाहरी SpringBoardServices API तब इंस्टॉल किए गए और अनुपस्थित दोनों लक्ष्यों के लिए 7 लौटाता है।
हुक इंस्टॉल होने से पहले निजी विधि के आर्ग्युमेंट काउंट और Objective-C टाइप एन्कोडिंग को सत्यापित किया जाता है। यदि Apple ABI बदलता है, तो AppEnumGuard किसी अज्ञात SpringBoard विधि को हुक करने के बजाय fail open हो जाता है।
1.0 से परिवर्तन
संस्करण 1.0 हर UIKit एप्लिकेशन के अंदर SpringBoardServices को हुक करता था। यह काम करता था, लेकिन संरक्षित किए जा रहे प्रत्येक ऐप में इंजेक्शन की आवश्यकता होती थी; जो ऐप इंजेक्शन को अक्षम या पहचान लेता, वह शमन को बायपास कर सकता था। संस्करण 1.1 प्रवर्तन को SpringBoard में स्थानांतरित करता है, ताकि एकल केंद्रीय हुक कॉलर की प्रक्रियाओं में AppEnumGuard इंजेक्ट किए बिना उनकी रक्षा कर सके।
रिलीज़ डाउनलोड
रिलीज़ 1.2 को किसी भी bootstrap के लिए बनाया जा सकता है:
AppEnumGuard_1.2_rootless_iphoneos-arm64.deb— पारंपरिक rootless ट्वीकAppEnumGuard_1.2_roothide_iphoneos-arm64e.deb— rootHide ट्वीकAppEnumGuardTester_1.2_sandboxed.ipa— आइकन के साथ सैंडबॉक्स्ड सत्यापन ऐप
इंस्टॉल करें और सत्यापित करें
- रूटलेस या rootHide bootstrap से मेल खाने वाला
.debइंस्टॉल करें और respring करें। - सामान्य developer/sideloading signature का उपयोग करके tester IPA इंस्टॉल करें।
- AppEnum Test के लिए AppEnumGuard injection को अक्षम (disabled) छोड़ दें; v1.1 इसे SpringBoard से सुरक्षित रखता है।
- किसी ऐसे ऐप के आइकन पर टैप करें जिसके बारे में आप जानते हैं कि वह इंस्टॉल है। WhatsApp, YouTube, Spotify, Dopamine, TrollStore, और Reddit के लिए प्रीसेट उपलब्ध हैं।
चयनित target इंस्टॉल होने पर अपेक्षित परिणाम:
| State | Target | Missing | Tester result |
|---|---|---|---|
| Tweak अनुपस्थित | 9 | 7 | लाल / FAIL |
| Tweak सक्रिय | 7 | 7 | हरा / PASS |
Tester केवल ज्ञात vulnerable 9 / 7 परिणाम के लिए लाल रिपोर्ट करता है और हर अन्य संख्यात्मक परिणाम के लिए हरा;
एक लाल परिणाम बताता है कि AppEnumGuard इंस्टॉल नहीं है।
हरे परिणामों को App not detected लेबल किया जाता है। vulnerable 9 / 7 परिणाम
को App detected और AppEnumGuard missing लेबल किया जाता है।
केवल ऐसा ऐप चुनें जिसके बारे में आप जानते हैं कि वह इंस्टॉल है: अकेले 7 / 7
काम करने वाले mitigation और ऐसे target में अंतर नहीं कर सकता जो मौजूद ही नहीं है।
Tester में एक संक्षिप्त प्रोजेक्ट विवरण और इस GitHub repository का क्लिक करने योग्य लिंक भी शामिल है।
डिवाइस परीक्षण ने tester injection अक्षम रखते हुए दोनों स्थितियों को पुनः उत्पन्न किया:
tweak को uninstall करने पर लाल 9 / 7 परिणाम आया, जबकि v1.1 इंस्टॉल करने पर
हरा 7 / 7 परिणाम आया।
Tweak बनाएँ
मानक Theos के साथ, डिफ़ॉल्ट build पारंपरिक rootless है:
cd Tweak
make clean package FINALPACKAGE=1
rootHide के लिए, rootHide Theos इंस्टॉल करें और चलाएँ:
cd Tweak
THEOS=/path/to/theos-roothide \
make clean package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=roothide
टेस्टर IPA बनाएँ
टेस्टर को Xcode के iPhoneOS SDK के साथ संकलित किया गया है और इसमें कोई jailbreak या elevated entitlements नहीं हैं:
./scripts/build-tester-ipa.sh
परिणामी IPA dist/ में रखा जाता है। यह ad-hoc signed है ताकि कोई इंस्टॉलर इसे सामान्य development identity के साथ फिर से sign कर सके। इसे platform-application या com.apple.private.security.no-sandbox न दें, क्योंकि यह परीक्षण विशेष रूप से सामान्य application sandbox से चलाने के लिए है।
दायरा और सीमाएँ
- यह प्रकाशित SpringBoardServices primitive के लिए user-space mitigation है, Apple का पूर्ण FrontBoard patch नहीं।
- संस्करण 1.1 को संरक्षित applications में injection की आवश्यकता नहीं है। injection को वैश्विक रूप से या स्वयं SpringBoard के लिए अक्षम करने से mitigation अक्षम हो जाएगी।
- server-side implementation की पुष्टि iOS 17.3.1 build 21D61 पर की गई है। अन्य समर्थित संस्करणों पर, tweak अपना hook केवल तब इंस्टॉल करता है जब private selector में अपेक्षित runtime-validated ABI हो।
7 / 7परीक्षण तभी सार्थक है जब लक्ष्य application इंस्टॉल होना ज्ञात हो।- परीक्षक जानबूझकर एक undocumented private API को कॉल करता है और App Store submission के लिए उपयुक्त नहीं है।
संदर्भ
- Apple iOS 18.5 security content
- NVD: CVE-2025-31207
- Original public SpringBoardServices proof of concept
- rootHide developer documentation
लाइसेंस
MIT