
إثبات مفهوم لتجاوز مُنوِّع PAC الثابت في معالج setxattr الخاص بـ tmpfs على iOS 26.6، يُظهر إمكانية الوصول إلى مسار التوقيع القابل للاستغلال من مساحة المستخدم.
المكوّن: XNU VFS — default_setxattr_doubleagent (VNOP الخاص بـ tmpfs)
المتأثر: iOS / iPadOS 26.6 (23G71) والإصدارات الأقدم
تم الإصلاح في: iOS / iPadOS 26.6.1 (23G83)
النوع: مُنوّع PAC ثابت في توقيع مؤشر معالج xattr
التأثير: التحكم في عداد البرنامج (PC) من سياق النواة؛ تصعيد كامل للصلاحيات عند دمجه مع بدائية كتابة في النواة
اكتُشف بواسطة: Bhaswanth Chigurupati، Billy Jheng Bing Jhong، Pan Zhenpeng (@Peterpan0927) من STAR Labs SG Pte. Ltd.
(وفقًا لنشرة أمان Apple — iOS 26.6.1)
default_setxattr_doubleagent، معالج xattr من نوع VNOP لنظام ملفات tmpfs، يوقّع مؤشر دالة معالج xattr باستخدام مُنوّع PAC ثابت ومعروف وقت الترجمة: #0x307a.
; نواة XNU — default_setxattr_doubleagent (مفكك)
handler_ptr = vnode_operations[VNOP_SETXATTR_SLOT]; // قراءة من جدول vnop
signed_ptr = PACDA(handler_ptr, 0x307a); // توقيع بمُنوّع ثابت
... call AUTDA(signed_ptr, 0x307a) → BLR // مصادقة وقفز
نظرًا لأن المُنوّع ثابت ومعروف للعموم، يمكن للمهاجم الذي يمتلك بدائية كتابة في النواة أن:
forged = PACIA(shellcode_addr, 0x307a)forged في الفتحة المناسبة من جدول vnode_operations الخاص بالعقدة الهدف.setxattr() على أي ملف في نقطة تحميل tmpfs ← تنفّذ النواة shellcode_addr.في سلسلة تصعيد صلاحيات نواة iOS 26.6:
CVE-2026-64788 (IOGPUFamily UAF) → بدائية قراءة/كتابة في النواة
CVE-2026-65330 (هذا الثغرة) → التحكم في PC → الجذر (uid=0)
بدائية sign_ptr (PACIA بمُنوّع #0x307a) مُنفَّذة في POC الخاص بكسر الحماية باستخدام تجميع ARM64e مضمّن. تُستخدم بدائية القراءة/الكتابة في النواة من أجل:
v_op للعقدة الهدف.vnode_operations[VNOP_SETXATTR_SLOT].setxattr("/tmp/trigger", ...).يختبر PoC المستقل (poc_pac_bypass.c) مسار VNOP القابل للاستغلال:
/var/root/poc65330_testsetxattr() مع XATTR_NAME="com.apple.poc.cve65330.test" ← يصل إلى default_setxattr_doubleagentremovexattr() للوصول إلى مسار التنظيفلا يقوم PoC بتزييف مؤشر PAC أو الكتابة فوق أي بيانات في النواة — بل يُظهر فقط أن مسار التوقيع القابل للاستغلال #0x307a يمكن الوصول إليه من مساحة المستخدم عبر استدعاء نظام setxattr() عادي.
/var/root/ (استدعاء setxattr نفسه قابل للوصول من أي عملية — يمكن تعديل مسار الملف إلى موقع قابل للكتابة داخل بيئة الحماية)# ملف C مستقل (لا يتطلب أطر عمل)
clang -arch arm64 -o poc poc/poc_pac_bypass.c
# للجهاز (مع التوقيع):
clang -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-o poc poc/poc_pac_bypass.c
codesign -s "Apple Development" poc
تم التحقق من المُنوّع الثابت 0x307a من تفكيك kernelcache الخاص بالإصدار 26.6 (23G71):
; default_setxattr_doubleagent + 0x?? (تقريبي)
MOVZ x1, #0x307a ; ثابت المُنوّع
PACDA x0, x1 ; توقيع مؤشر المعالج
يستخدم AUTDA x0, x1 المقابل في موقع الاستدعاء نفس الثابت، مما يؤكد أن أي مؤشر مزيّف بـ PACIA مع مُنوّع 0x307a ينجح في المصادقة.
| التاريخ | الحدث |
|---|---|
| 2026-08-17 | إصدار iOS 26.6.1 مع الإصلاح |
| 2026-08-17 | نشر اعتمادات Apple في نشرة الأمان |