العودة إلى التحديثات
UpdatedAug 8, 2026

cve-2026-43499 — Updated!

دراسة جدوى لـ 43499(ghostlock) لـ PD2229B

مشاركة

ملخص فشل استغلال GhostLock على PD2229 (SM8475, 5.10.233 GKI)

一、حقائق الثغرة والجهاز

1.1 المعلومات الأساسية لـ CVE-2026-43499 (GhostLock)

العنصرالقيمة
نوع الثغرةUse-After-Free على المكدس في مسار rt_mutex / futex PI
إصدار الإدخالLinux 2.6.39-rc1 (مايو 2011، commit 8161239a8bcc)
إصدار الإصلاحالرئيسي 7.1 (commit 3bfdc63936dd)، الفروع المستقرة: 6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4
الشرط المسبقCONFIG_FUTEX_PI=y (مفعل افتراضيًا في النوى الرئيسية)
CVSS7.8 عالية
استقرار الاستغلالسلسلة NebuSec الأصلية 97%، الحصول على صلاحيات root خلال ~5 ثوانٍ
جائزة kernelCTF$92,337 دولار أمريكي

نطاق النوى المتأثرة:

  • 2.6.39 ≤ Linux < 6.1.175 ✅ متأثر
  • 6.2 ≤ Linux < 6.6.140 ✅ متأثر
  • 6.7 ≤ Linux < 6.12.86 ✅ متأثر
  • 6.13 ≤ Linux < 6.18.27 ✅ متأثر
  • 6.19 ≤ Linux < 7.0.4 ✅ متأثر
  • Android GKI 5.10 غير مشمول في أي فرع إصلاح ← إصدار 5.10.233 على PD2229 متأثر نظريًا

1.2 القياسات الفعلية لجهاز PD2229

العنصرالقيمة
SoCQualcomm SM8475 (Snapdragon 8 Gen 1 Plus)
إصدار النواة5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (24 نوفمبر 2025)
إصدار Android15 (OriginOS 5)
وقت الترجمة2025/11/25
تصحيح Android2025/11/01
CONFIG_FUTEX_PIy ✅
CONFIG_UNMAP_KERNEL_AT_EL0y (KPTI مفعل)
kptr_restrictمفروض
CONFIG_IO_URINGy ✅ (مؤكد برموز vmlinux، و seccomp لا يعترض io_uring_setup)

二、سلسلة الاستغلال المثالية مقابل التقدم الفعلي على PD2229

2.1 السلسلة الأصلية لـ NebuSec (نجحت على x86_64 / Pixel 10)

1. تجاوز KASLR        ← توقيت prefetch / PR_SET_MM_MAP auxv
2. تشغيل UAF          ← طريق مسدود يعتمد على PI بثلاثة خيوط ← FUTEX_CMP_REQUEUE_PI يُرجع -EDEADLK
3. استعادة المكدس     ← PR_SET_MM_MAP ينسخ auxv إلى إطار مكدس waiter
4. كتابة مقيدة بـ rb_erase ← الكتابة فوق inet6_protos[IPPROTO_UDP]
5. CEA + ROP          ← اختطاف تدفق التحكم
6. قلب core_pattern   ← قشرة root (نسبة نجاح 97%)

2.2 التقدم الفعلي لكل مرحلة على PD2229

المرحلةالحالةالوصف
1. تجاوز KASLR✅ تم التنفيذقناة جانبية perf_event_open + أخذ عينات callchain (بنفس طريقة تكييف OPPO Find X6 Pro 5.15.149)
2. تشغيل UAF✅ تم التنفيذنجح الطريق المسدود PI بثلاثة خيوط، FUTEX_CMP_REQUEUE_PI يُرجع -EDEADLK
3. بدائية استعادة المكدس❌ فشل معماريإطارات مكدس جميع استدعاءات النظام المعروفة لا تتداخل مع waiter (انظر القسم الثالث)
4. الكتابة المقيدة بـ rb_erase❌ محظورالشرط المسبق غير مستوفى
5. الكتابة فوق inet6_protos❌ لم يبدأيعتمد على المرحلة 4
6. ROP / اختطاف تدفق التحكم❌ لم يبدأيعتمد على المرحلة 5
7. قشرة root❌ لم يبدأيعتمد على المرحلة 6

三、نتائج الاستنفاد الشامل لبدائية استعادة المكدس (قياسات PD2229 الفعلية)

3.1 الحسابات الرئيسية لتخطيط إطار المكدس

العمق الإجمالي لمسار futex:
  __arm64_sys_futex    0x90
  + do_futex           0xc0
  + futex_wait_requeue_pi  0x1b0
  = 0x300
موقع waiter = SYS_SP - 0x300 + 0x20 = SYS_SP - 0x2e0

مسار pselect:
  إطار مكدس core_sys_select 0x1c0، stack_fds عند sp+0x50
  نطاق التغطية: يبدأ من SYS_SP - 0x1c0 + 0x50 = SYS_SP - 0x170
  الفرق مع waiter (SYS_SP - 0x2e0) هو 0x170 (368 بايت) ← لا تداخل

3.2 الطرق الـ 17 المجربة للكتابة على المكدس

#الطريقةاستدعاء النظامنتيجة PD2229سبب الفشل الأساسي
1stamp_prctlPR_SET_MM_MAP❌ EPERMاعتراض صارم من Android
2stamp_pselectpselect6 (NFDS=320)❌ لا تداخلwaiter أسفل fd_set بـ 120B
3stamp_pselectpselect6 (NFDS>336)❌ تخصيص كومةمسار kvmalloc
4stamp_socketMCAST_JOIN_SOURCE_GROUP❌ تغطية غير كافيةيكتب حقل lock فقط
5stamp_sendmsgsendmsg❌ على بعد 80B من waiterعمق إطار المكدس 0x90 غير كافٍ
6stamp_sendmmsgsendmmsg❌ على بعد 112B من waiterإطار المكدس غير كافٍ
7stamp_recvmmsgrecvmmsg❌ يصفّر task/lockإطار 0x1d0 يدمر المؤشرات الحرجة
8stamp_process_vmprocess_vm_writev❌ لا تداخلمكدس الخيط الفرعي مخصص بشكل مستقل
9stamp_keyctlKEYCTL_INSTANTIATE_IOV❌ EOPNOTSUPPاستدعاء النظام غير مدعوم + إطار مكدس 0x40
10stamp_tcpTCP_ZEROCOPY_RECEIVE❌ إطار مكدس غير كافٍالعمق المقدر غير كافٍ
11stamp_futexFUTEX_CMP_REQUEUE_PI تكراري❌ غير ممكن منطقيًايدمر نافذة UAF
12binder ioctlBINDER_WRITE_READ❌ EACCESلا توجد صلاحية /dev/binder للقشرة
13pollpoll❌ تخصيص كومةpollfd على الكومة
14epoll_waitepoll_wait❌ إطار ضحل جدًاإطار مكدس 0xE0
15sched_setattrsched_setattr❌ عمق غير كافٍإطار مكدس 0xb0
16timerfd_settimetimerfd_settime❌ لا نسخ على المكدسلا يوجد مخزن مؤقت كبير على المكدس
17io_uring_registerIORING_REGISTER_*❌ فشل مزدوج①إطار المكدس 0xF0 فقط، هدف copy_from_user ثابت عند sp+0x8 (فرق 424 بايت عن sp+0x1D0 للـ waiter)؛ ②على الرغم من أن io_uring_setup لا يعترضه seccomp (يُرجع EFAULT بدلاً من ENOSYS)، فإن تخطيط المكدس غير متطابق

فشل 17/17 بالكامل.

3.3 السبب الجذري للفشل

تخطيط المكدس الناتج عن مترجم SM8475 5.10 GKI على PD2229 (PGO + LTO + BOLT) يؤدي إلى عدم تداخل معماري بين stack_fds في core_sys_select وrt_mutex_waiter في futex_wait_requeue_pi. هذه حقيقة موضوعية يحددها المترجم، وليست مشكلة في تقنية الاستغلال.

يذكر مستودع JoinChang بوضوح: "The pselect stack overlay only works when the freed rt_mutex_waiter lands within the user-controllable region of the stack_fds buffer" — PD2229 لا يستوفي هذا الشرط.


四、تحليل مقارن للمستودعات المرجعية العامة

NebuSec/CyberMeowfia — إطار الاستغلال الأصلي

  • المستودع: https://github.com/NebuSec/CyberMeowfia
  • الهدف: x86_64 Linux / Pixel 10 (6.x GKI)
  • استعادة المكدس: PR_SET_MM_MAP ينسخ auxv إلى مكدس النواة
  • نسبة النجاح: 97%، قشرة [root] خلال ~5 ثوانٍ
  • قابلية التطبيق على PD2229: ❌ PR_SET_MM_MAP معترض بـ EPERM على Android

JoinChang/ghostlock-oneplus — كسر قفل BL لـ OnePlus

  • المستودع: https://github.com/JoinChang/ghostlock-oneplus
  • الأجهزة المُتحقق منها:
    • OnePlus Ace 6T (PLR110, SM8845) — 6.12.38 GKI ✅
    • OnePlus 15 (PLK110, SM8845) — 6.12.23 GKI ✅
  • النقاط التقنية:
    • استخراج تلقائي للإزاحات: kallsyms (28) + BTF (57) + مشتقة (9) + ثوابت (12) = 103/103
    • تغطية مكدس pselect، فرق SP = -64
    • PSELECT_SHIFT = -2
    • سلسلة الاستغلال: futex UAF ← تزييف waiter ← pselect يتحكم بالمكدس ← كتابة مقيدة بـ rb_erase ← selinux_state.enforcing=0 ← الكتابة فوق cred إلى init_cred
  • إعلان صريح بعدم الجدوى: "Not Feasible (stack layout incompatible)" — ينطبق فقط على النوى التي يتداخل فيها pselect stack_fds مع waiter
  • قابلية التطبيق على PD2229: ❌ عدم تطابق جيل النواة (6.12 مقابل 5.10)، وعدم تداخل تخطيط المكدس

p2p3p/GhostLock-for-OnePlus — استغلال كامل لـ OnePlus 6.12

YuKongA/ghostlock-oplus — OPPO Find N5/X8

تكييف OPPO Find X6 Pro (PGEM10) — 5.15.149

  • الجهاز: SM8550, 5.15.149-android13, Android 15
  • التقدم: ✅ تجاوز KASLR (perf_event_open + أخذ عينات callchain)؛ المراحل اللاحقة لم تُنشر كاستغلال كامل
  • الأهمية: يثبت أن تجاوز KASLR ممكن على 5.15 GKI، لكن مرحلة استعادة المكدس لم تُتحقق علنًا

الفئات