
ARM32 استغلال ثغرة رفع الامتيازات في نواة لينكس لـ CVE-2026-43499 (GhostLock futex UAF) يستهدف Huawei Watch 4 Pro مع متغيرات استغلال متعددة وتحليل مفصل للالتفاف.
محاولة استغلال ثغرة رفع الامتيازات في نواة لينكس استناداً إلى CVE-2026-43499 (GhostLock) — Huawei Watch 4 Pro (MDS-AL00, armv7l)
هذا المشروع هو محاولة لاستغلال ثغرة GhostLock في النواة على جهاز Huawei Watch 4 Pro (MDS-AL00, Snapdragon SW5100, HarmonyOS 4.3.0 AOSP 12)، مع التكييف لمعمارية ARM 32-bit (armv7l).
GhostLock (CVE-2026-43499) هي ثغرة من نوع UAF في كائن futex PI للنواة تؤثر على لينكس من الإصدار 2.6.39 إلى 7.x. هدف هذا المشروع هو إكمال سلسلة رفع الامتيازات الكاملة على ساعة هواوي.
المستودع الأصلي: MobiusM/CVE-2026-43499 (PoC لـ arm64)
على نواة 5.4.161 ARM32، بعد أن يُشغّل FUTEX_CMP_REQUEUE_PI خطأ EDEADLK، لا ينفذ اجتياز سلسلة PI عملية rb_erase الثانية. السلسلة الاستغلالية التي يعتمد عليها GhostLock 64 (UAF ← كتابة rb_erase الثانية في صفحة UAF) غير فعالة تماماً على هذه النواة.
جميع أشكال حقن 8-iov writev تفشل: sc[0] after = e3a0002a (صفحة الشيل كود لم تُكتب).
حقن 8-iov writev في ghostlock64 يعتمد على تداخل مصفوفة iovstack[8] على مكدس النواة مع بنية rt_mutex_waiter. على هذه النواة:
clear_refs_operations.writeيستطيع sched_setattr تشغيل اجتياز سلسلة PI بنجاح (تم التحقق مع success=1600+)، لكن rb_erase يعالج بيانات الموضوع المالك المتمثلة في pi_tree_entry (الموجودة في task_struct على كومة kmalloc)، وليس بيانات مكدس الموضوع المنتظر (بيانات writev من fd_set).
وبالتالي، لا يمكن استخدام مسار pselect + sched_setattr للتحكم في القيمة المكتوبة.
mmap(0, ..., MAP_FIXED, ...) يُرجع -EINVAL، وليس -EACCES القياسي في لينكسCONFIG_SECURITY_SELINUX_DEVELOP=n ← حقل selinux_state.enforcing غير موجودmremap يُرجع ENOSYScommit_creds: 0xC0140390
prepare_kernel_cred: 0xC014059C
proc_clear_refs_ops: 0xC0CAF280 (.write @ +12 = 0xC0CAF28C)
mmap_min_addr: 0xC12E8568
dac_mmap_min_addr: 0xC123C734
selinux_hooks[mmap]: 0xC0F64E1C
| المستودع | الجهاز | النواة | المعمارية |
|---|---|---|---|
| x-spy/CVE-2026-43499-popsicle |
كلا المستودعين يستخدمان pselect() + sched_setattr لتشغيل سلسلة PI + كتابة مباشرة عبر physmap، معتمدين على آلية الخريطة المباشرة لـ ARM64. ARM32 ليس لديها خريطة مباشرة، وسلوك سلسلة PI في هذه النواة مختلف.
CVE-2026-43499-armv7/
├── config/
│ └── kernel.config # ملف .config لنواة الجهاز (5.4.161-perf)
├── scripts/
│ ├── ghostlock_all.sh # سكريبت اختبار جماعي
│ └── ghostlock_check.sh # سكريبت كشف
├── src/
│ ├── ghostlock64.c # PoC الأصلي بـ 8-iov ومحو مزدوج (إطار أساسي)
│ ├── ghostlock5-33.c # إصدارات متكررة سابقة (ghostlock5 ~ ghostlock33)
│ ├── ghostlock63.c # متغير ghostlock 6.x بـ 3-iov
│ ├── g62_*.c # متغيرات بـ 3-iov (عناوين مختلفة)
│ ├── g62_8e.c # حقن دقيق بـ 8-iov (النسخة النهائية)
│ ├── g62_scan.c # مسح إزاحات iov متعددة
│ ├── g62_self.c # اختبار EDEADLK المشغّل ذاتياً من المنتظر
│ ├── g62_pispray.c # EDEADLK + slab spray + sched_setattr
│ ├── g62_rand.c # اختبار كتابة randomize_va_space
│ ├── gsu_v19.c # تشغيل بـ 8-iov + sched_setattr
│ ├── gl_pselect*.c # اختبارات pselect + sched_setattr
│ ├── gl_scan.c # مسح إزاحات fd_set
│ ├── sc64.c # حمولة الشيل كود
│ ├── trigger*.c # PoC تشغيل أصلي (للتحقق من وجود الثغرة)
│ ├── ghostlock_root.c # محاولة جذر مبكرة
│ └── test_*.c # اختبارات تجميع/تشغيل
├── README.md
├── ghostlock64 # ثنائي PoC بـ 8-iov ومحو مزدوج
├── ghostlock63 # ثنائي ghostlock 6.x بـ 3-iov
├── g62_* # ثنائيات متغيرات بـ 3-iov
├── gl_* # ثنائيات اختبار pselect
├── gsu # متغير اختطاف sc-page
├── sc64 # الشيل كود
├── trigger* # ثنائيات PoC تشغيل أصلي
└── test_* # ثنائيات اختبار
تنفيذ سلسلة PI في إصدار النواة هذا (5.4.161 ARM32) لا يدعم تقنية الكتابة العشوائية المزدوجة لـ rb_erase الخاصة بـ GhostLock. جميع مسارات استغلال CVE-2026-43499 المعروفة معطلة على هذا الجهاز. يتطلب الأمر اكتشاف بدائية كتابة صفر جديدة أو ثغرة أخرى للمتابعة.
هواوي لقد أهلكتني! لقد أحرقت 30 رمزاً من رصيد DeepSeek V4 Pro الخاص بي.
| المعامل | القيمة |
|---|
| الجهاز | Huawei Watch 4 Pro (MDS-AL00) |
| النواة | 5.4.161-perf (ARM32 armv7l) |
| النظام | HarmonyOS 4.3.0 (AOSP 12) |
| وحدة المعالجة | Snapdragon SW5100 |
| SELinux | مفعّل (CONFIG_SECURITY_SELINUX_DEVELOP=n) |
| KASLR | معطل |
| MMU | CONFIG_STRICT_KERNEL_RWX=y |
| المكدس | NX (مكدس النواة غير قابل للتنفيذ) |
| mmap(0) | اعتراض إضافي من هواوي (-EINVAL، غير قياسي -EACCES) |
| المرحلة | الحالة | الشرح |
|---|
| تشغيل GhostLock FUTEX PI | ✅ تم التحقق بنجاح | FUTEX_CMP_REQUEUE_PI يُرجع EDEADLK (-35) |
| تشغيل اجتياز سلسلة PI | ✅ تم التحقق بنجاح | sched_setattr يُشغّل اجتياز سلسلة PI |
| عملية rb_erase الثانية | ❌ العائق الأساسي | تنفيذ سلسلة PI في هذه النواة لا ينفذ rb_erase الثانية |
| محاذاة iovstack | ❌ عائق | حقن 8-iov writev لا يتداخل مع بنية rt_mutex_waiter |
| تجاوز mmap(0) | ❌ عائق | نواة هواوي تقوم بفحص إضافي (-EINVAL) |
| اختطاف fops | ❌ عائق | لا توجد بدائية كتابة عشوائية مسيطَر عليها |
| كتابة cred | ❌ عائق | محدود بسبب النقاط العالقة أعلاه |
| إتمام رفع الامتيازات | ❌ | لم يتم |
| المسار | النتيجة | السبب |
|---|
| ghostlock64 8-iov writev → FLPI | ❌ | عدم تشغيل rb_erase الثانية |
| ghostlock64 + sched_setattr | ❌ | نفسه، سلسلة PI لا تصل إلى صفحة UAF |
| g62 3-iov | ❌ | يمكن الكتابة لكن القيمة هي عنوان مكدس، والمكدس NX غير قابل للتنفيذ |
| pselect + sched_setattr | ❌ | rb_erase يعالج بيانات كومة المالك |
| محاولة FLPI الثانية من المنتظر | ❌ | مسار سريع لـ EDEADLK، لا يقرأ المكدس |
| مسح إزاحات iov (22 تخطيطاً) | ❌ | كلها لا تتداخل |
| تجاوز mm(0) / mremap | ❌ | -EINVAL / ENOSYS |
| مسح خطاف selinux | ❌ | حقل enforcing غير موجود |
| Xiaomi 17 Pro Max |
| 6.12.23 |
| ARM64 |
| pubglite55/oppo-ghostlock | OPPO Find N2 | 5.10.236 | ARM64 |