
CVE-2025-31207 التخفيف ومختبر معزول لعمليات كسر الحماية rootless وrootHide على iOS 15–18.4.1.
AppEnumGuard هو تعديل دفاعي لثغرة تعداد التطبيقات المثبتة الجانبية المتتبعة باسم CVE-2025-31207. يدعم بيئات الجيلبريك التقليدية rootless وrootHide على iOS 15.0–18.4.1. يحتوي المستودع أيضًا على تطبيق اختبار iOS عادي معزول (sandboxed) يوضح النتيجة القابلة للاستغلال ويتحقق من التخفيف.
CVE-2025-31207 هو ثغرة كشف معلومات في منطق تشغيل التطبيقات FrontBoard من Apple. يمكن لتطبيق معزول (sandboxed) إرسال معرفات حزم عشوائية عبر دالة تشغيل خاصة بـ SpringBoardServices والتمييز بين التطبيقات المثبتة والتطبيقات المفقودة باستخدام رموز إرجاع مختلفة. يمكن أن يكشف هذا معلومات خاصة حول التطبيقات التي قام المستخدم بتثبيتها، بما في ذلك تطبيقات الخدمات المصرفية والمراسلة والأمان والتثبيت الجانبي والتطبيقات المتعلقة بالجيلبريك.
تصف Apple المشكلة بأنها مشكلة منطقية قد تسمح لتطبيق بتعداد التطبيقات المثبتة. صححت Apple ذلك بفحوصات محسّنة في iOS وiPadOS 18.5. وبالتالي، تظل الأنظمة الأقدم من iOS 18.5 متأثرة على مستوى نظام التشغيل.
| المكوّن | الهدف المدعوم |
|---|---|
| iOS | 15.0–18.4.1 |
| الجيلبريك | أي بيئة جيلبريك تقليدية rootless أو rootHide |
| بنية التمهيد/الحزم | rootless / iphoneos-arm64; rootHide / iphoneos-arm64e |
| بنية الجهاز | arm64 وarm64e (rootless); arm64e (rootHide) |
| الحزمة | ثبّت الحزمة المطابقة لبنية تمهيد الجهاز |
البناء الافتراضي يستخدم Theos التقليدي rootless ويتضمن شرائح arm64 وarm64e. متغير rootHide مبني باستخدام rootHide Theos ويحتوي على مسارات محمل .jbroot المطلوبة لـ rootHide. تعلن كلتا الحزمتين عن
firmware (>= 15.0) و
firmware (<< 18.5): التخفيف غير ضروري على iOS 18.5 والإصدارات الأحدث، حيث أصلحت Apple CVE-2025-31207.
تم التحقق من تعديل v1.1 الخاص بـ SpringBoard-side ومختبر الحماية المعزولة معًا على iOS 17.3.1 build 21D61 مع تعطيل الحقن للمختبر. اكتشف المختبر التسريب مع إزالة التعديل وعاد بنتيجة خضراء (نجاح) بعد تثبيت التعديل.
البدائية المنشورة تستدعي دالة SpringBoardServices الخاصة
SBSLaunchApplicationWithIdentifierAndURLAndLaunchOptions. على نظام قابل للاستغلال، تُرجع أخطاء مختلفة لتطبيق مثبت وتطبيق مفقود:
9: الهدف موجود، لكن الإطلاق مرفوض بواسطة السياسة7: الهدف غير موجودAppEnumGuard 1.1 يحقن فقط في SpringBoard ويخطف طريقة التحقق من الثقة الشائعة FBSystemService. عندما يُرجع طلب إطلاق غير مصرح به خطأ سياسة الأمان FBSOpenApplicationErrorDomain رقم 3، يغيّر التعديله إلى خطأ التطبيق غير موجود رقم 4. ثم تُرجع واجهة SpringBoardServices الخارجية 7 لكل من الأهداف المثبتة والمفقودة.
يتم التحقق من عدد وسائط الطريقة الخاصة وترميز نوع Objective-C قبل تثبيت الخطاف. إذا غيّرت Apple واجهة ABI، يفشل AppEnumGuard بشكل مفتوح بدلاً من خطف طريقة SpringBoard غير معروفة.
الإصدار 1.0 كان يخطف SpringBoardServices داخل كل تطبيق UIKit. كان يعمل، لكنه يتطلب حقنًا في كل تطبيق محمي؛ التطبيق الذي يعطّل أو يكتشف الحقن يمكنه تجاوز التخفيف. الإصدار 1.1 ينقل التنفيذ إلى SpringBoard، لذا خطاف مركزي واحد يحمي المتصلين دون حقن AppEnumGuard في عملياتهم.
يمكن بناء الإصدار 1.2 لأي من التمهيدين:
AppEnumGuard_1.2_rootless_iphoneos-arm64.deb — تعديل rootless تقليديAppEnumGuard_1.2_roothide_iphoneos-arm64e.deb — تعديل rootHideAppEnumGuardTester_1.2_sandboxed.ipa — تطبيق تحقق معزول مع أيقونة.deb المطابق لتمهيد rootless أو rootHide وأعد تشغيل الواجهة (respring).النتائج المتوقعة مع تثبيت الهدف المحدد:
| الحالة | الهدف | المفقود | نتيجة المختبر |
|---|---|---|---|
| التعديل غائب | 9 | 7 | أحمر / فشل |
| التعديل نشط | 7 | 7 | أخضر / نجاح |
يُبلغ المختبر باللون الأخضر عندما لا يمكن اكتشاف التطبيق المحدد وبالأحمر عندما يمكن اكتشافه. حدد فقط تطبيقًا تعرف أنه مثبت: 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
يُجمّع المختبر باستخدام iPhoneOS SDK الخاص بـ Xcode وليس لديه جيلبريك أو امتيازات مرتفعة:
./scripts/build-tester-ipa.sh
يتم وضع IPA الناتج في dist/. إنه موقّع بشكل مخصص (ad-hoc) بحيث يمكن للمثبّت إعادة توقيعه بهوية تطوير عادية. لا تمنحه
platform-application أو com.apple.private.security.no-sandbox، لأن الاختبار مخصص تحديدًا للعمل من حماية تطبيق عادية.
7 / 7 ذو معنى فقط عندما يكون التطبيق الهدف معروفًا بأنه مثبت.MIT