
CVE-2025-31207 शमन और iOS 15–18.4.1 पर rootless और rootHide जेलब्रेक के लिए सैंडबॉक्स्ड परीक्षक।
AppEnumGuard स्थापित-एप्लिकेशन गणना (installed-application enumeration) साइड चैनल के लिए एक रक्षात्मक ट्वीक है, जिसे CVE-2025-31207 के रूप में ट्रैक किया गया है। यह iOS 15.0–18.4.1 पर पारंपरिक rootless और rootHide जेलब्रेक वातावरण का समर्थन करता है। रिपॉजिटरी में एक सामान्य सैंडबॉक्स्ड iOS परीक्षण एप्लिकेशन भी शामिल है जो कमजोर परिणाम प्रदर्शित करता है और मिटिगेशन को सत्यापित करता है।
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 जेलब्रेक वातावरण |
| बूटस्ट्रैप/पैकेज आर्किटेक्चर | rootless / iphoneos-arm64; rootHide / iphoneos-arm64e |
| डिवाइस आर्किटेक्चर | arm64 और arm64e (rootless); arm64e (rootHide) |
| पैकेज | डिवाइस के बूटस्ट्रैप से मेल खाने वाला पैकेज स्थापित करें |
डिफ़ॉल्ट बिल्ड पारंपरिक 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 ने प्रत्येक UIKit एप्लिकेशन के अंदर SpringBoardServices को हुक किया। यह काम करता था, लेकिन सुरक्षित किए जा रहे प्रत्येक ऐप में इंजेक्शन की आवश्यकता थी; एक ऐप जो इंजेक्शन को अक्षम या पता लगाता था, मिटिगेशन को बायपास कर सकता था। संस्करण 1.1 प्रवर्तन को SpringBoard में स्थानांतरित करता है, इसलिए एक एकल केंद्रीय हुक कॉलर्स की सुरक्षा करता है बिना AppEnumGuard को उनकी प्रक्रियाओं में इंजेक्ट किए।
रिलीज़ 1.2 को किसी भी बूटस्ट्रैप के लिए बनाया जा सकता है:
AppEnumGuard_1.2_rootless_iphoneos-arm64.deb — पारंपरिक rootless ट्वीकAppEnumGuard_1.2_roothide_iphoneos-arm64e.deb — rootHide ट्वीकAppEnumGuardTester_1.2_sandboxed.ipa — आइकन के साथ सैंडबॉक्स्ड सत्यापन ऐप.deb स्थापित करें और respring करें।चयनित लक्ष्य स्थापित होने पर अपेक्षित परिणाम:
| स्थिति | लक्ष्य | अनुपस्थित | परीक्षक परिणाम |
|---|---|---|---|
| ट्वीक अनुपस्थित | 9 | 7 | लाल / FAIL |
| ट्वीक सक्रिय | 7 | 7 | हरा / PASS |
परीक्षक हरा रिपोर्ट करता है जब चयनित ऐप का पता नहीं लगाया जा सकता है और लाल जब इसका पता लगाया जा सकता है। केवल उस ऐप का चयन करें जिसे आप जानते हैं कि स्थापित है: अकेले 7 / 7 एक काम करने वाले मिटिगेशन को एक ऐसे लक्ष्य से अलग नहीं कर सकता जो मौजूद नहीं है।
डिवाइस परीक्षण ने परीक्षक इंजेक्शन अक्षम के साथ दोनों स्थितियों को पुन: उत्पन्न किया: ट्वीक अनइंस्टॉल करने पर लाल 9 / 7 परिणाम उत्पन्न हुआ, जबकि v1.1 स्थापित करने पर हरा 7 / 7 परिणाम उत्पन्न हुआ।
मानक Theos के साथ, डिफ़ॉल्ट बिल्ड पारंपरिक 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
परीक्षक Xcode के iPhoneOS SDK के साथ संकलित किया गया है और इसमें कोई जेलब्रेक या उन्नत एंटाइटलमेंट नहीं है:
./scripts/build-tester-ipa.sh
परिणामी IPA dist/ में रखा गया है। यह एड-हॉक हस्ताक्षरित है ताकि एक इंस्टॉलर इसे सामान्य विकास पहचान के साथ फिर से हस्ताक्षर कर सके। इसे platform-application या com.apple.private.security.no-sandbox न दें, क्योंकि परीक्षण विशेष रूप से सामान्य एप्लिकेशन सैंडबॉक्स से चलाने के लिए है।
7 / 7 परीक्षण केवल तभी सार्थक है जब लक्ष्य एप्लिकेशन स्थापित होने के लिए जाना जाता है।MIT