
سلسلة استغلال إثبات المفهوم لـ CVE-2026-43499 تستهدف أجهزة Android OPPO MT6835، مع حمولة مُحمَّلة مسبقًا، ونظام بناء، وملاحظات تحليلية للبحث الدفاعي.
GhostLock: ثغرة استخدام بعد التحرير (Use-After-Free) في futex PI في نواة لينكس، CVE-2026-43499. يستغل المهاجمون حلقات تبعية PI-futex لإحداث حالة تسابق (race condition)، مما يحقق تصعيدًا محليًا للامتيازات على النوى التي تحتوي على
CONFIG_FUTEX_PI=y.الهدف: OPPO PLS120 (OP5E1C) — أندرويد 17، النواة
5.15.180-android13-8-o-g7b9cfca06464بيئة التحليل: Ubuntu 24.04 x86_64 + Android NDK r29 (clang 21.0.0، API 35)
مستودع المصدر: NebuSec/CyberMeowfia — IonStack/CVE-2026-43499
يبحث هذا المشروع في جدوى استغلال GhostLock (CVE-2026-43499) للحصول على صلاحيات root على جهاز OPPO PLS120 (OP5E1C). من خلال التحقق المنهجي من جميع مسارات تسريب KASLR المعروفة، تم التأكد من أن مجموعة التحصينات الأمنية لهذا الجهاز تشكّل سلسلة حماية لا يمكن تجاوزها.
| المرحلة | الحالة | الوصف |
|---|---|---|
| المرحلة الأولى: تحليل boot.img واستخراج الرموز | ✅ مكتملة | استخراج boot.img من حزمة OTA ← إعادة بناء جدول الرموز بواسطة vmlinux-to-elf (159,668 رمزًا) |
| المرحلة الثانية: ترجمة preload.so | ✅ مكتملة | ترجمة متقاطعة باستخدام Android NDK r29، مع فرض آلية تسجيل فوري على القرص |
| المرحلة الثالثة: تشخيص الأعطال والإصلاح التكراري | 🔄 قيد التنفيذ | تم إصلاح MM_STRUCT_SZ، ودعم MTE، ومنطق تخطي SLIDE |
تحصينات OPPO PLS120 الأمنية تُغلق سلسلة الاستغلال بالكامل:
| بند التحصين | التأثير |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | يمنع تصادم KernelSnitch slab |
CONFIG_KASAN_HW_TAGS=y (MTE) | وسوم العناوين تزيد من تعقيد القوة الغاشمة |
CONFIG_CFI_CLANG=y | سلامة تدفق التحكم |
| سياسة نطاق SELinux shell | تمنع perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | يمنع مسار PR_SET_MM_MAP |
| إصلاح wchan المُستورد (backport) | يمنع تسريب عنوان النواة الافتراضي عبر /proc/<pid>/stat |
| الحل | الحالة | السبب |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (محجوب بواسطة نطاق SELinux shell) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (الحقل 35 في /proc/<pid>/stat) | ❌ | النواة طبّقت إصلاح v5.16 (يُرجع 1 بدلاً من عنوان النواة الافتراضي) |
| قناة SLIDE الجانبية (كتابة boot_id) | ❌ | وحدة nfulnl غير قابلة للتحميل |
| استرجاع مكدس PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (توقيت futex hash) | ⚠️ نجاح متقطع | ضوضاء التوقيت في بنية big.LITTLE تؤثر على الاستقرار |
SLIDE_MAX_ATTEMPTS=1 لتجاوز حلقة SLIDE اللانهائية!route_signal والخروج الفوري break، مما يسمح بـ 24 إعادة محاولةيبحث هذا المشروع في جدوى استغلال GhostLock (CVE-2026-43499) لتصعيد صلاحيات root على جهاز OPPO PLS120 (OP5E1C). بعد الاختبار المنهجي لجميع مسارات تسريب KASLR المعروفة، تشكّل إعدادات التحصين الأمني للجهاز سلسلة دفاع لا يمكن تجاوزها ضد هذا الاستغلال.
| المرحلة | الحالة | الوصف |
|---|---|---|
| المرحلة 1: تحليل boot.img | ✅ مكتملة | استخراج boot.img من OTA → إعادة بناء الرموز vmlinux-to-elf (159,668 رمزًا) |
| المرحلة 2: بناء preload.so | ✅ مكتملة | ترجمة متقاطعة باستخدام Android NDK r29، مع فرض تسجيل فوري على القرص |
| المرحلة 3: التشخيص والتكرار | 🔄 قيد التقدم | إصلاح MM_STRUCT_SZ، دعم MTE، منطق تجاوز SLIDE |
يحجب OPPO PLS120 سلسلة الاستغلال على طبقات متعددة:
| ميزة التقوية | التأثير |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | يمنع تصادم slab في KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | تزيد وسوم العناوين من تعقيد القوة الغاشمة |
CONFIG_CFI_CLANG=y | سلامة تدفق التحكم |
| سياسة نطاق shell في SELinux | يمنع perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | يمنع مسار PR_SET_MM_MAP |
| backport إصلاح wchan | يمنع تسريب عنوان kernel VA عبر /proc/<pid>/stat |
| الطريقة | الحالة | السبب |
|---|---|---|
| سلسلة استدعاء perf_event_open | ❌ | EACCES (نطاق shell في SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (الحقل 35 في /proc/<pid>/stat) | ❌ | النواة تحتوي على backport إصلاح v5.16 (يُرجع 1 بدلاً من kernel VA) |
| القناة الجانبية SLIDE (الكتابة فوق boot_id) | ❌ | وحدة nfulnl غير قابلة للتحميل |
| استعادة المكدس عبر PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (توقيت تجزئة futex) | ⚠️ متقطع | ضوضاء التوقيت في big.LITTLE تؤثر على الاستقرار |
SLIDE_MAX_ATTEMPTS=1!route_signal، مما يسمح بـ 24 إعادة محاولة/home/ubuntu/CyberMeowfia/
├── devices/ # Target device artifacts (OTA zip, config.gz, etc.)
├── work_bootimg/ # boot.img analysis output
│ └── oppo/ # OPPO-specific kernel data
│ ├── kernel.dec # Decompressed ARM64 Image (47MB)
│ ├── vmlinux_extracted.elf # Reconstructed vmlinux with symbols (159,668)
│ ├── kallsyms_oppo.txt # Full symbol table
│ └── kernel_config_oppo # Kernel .config (189KB)
├── IonStack/CVE-2026-43499/exploit/ # Exploit source code
│ ├── src/ # Source files (slide.c, fops.c, main.c, etc.)
│ │ ├── kernelsnitch/ # KernelSnitch futex hash timing module
│ │ └── targets/
│ │ └── oppo-pls120-BP2A.250605.015/ # OPPO-specific target configuration
│ └── build/ # Compiled binaries
├── unpack_bootimg.py # Python boot.img unpacker (v3/v4)
├── report.md # Phase 1 analysis report (Chinese)
├── GhostLock_CVE202643499_OPPO_PLS120_研究报告.md # Full research report (Chinese, 620 lines)
└── CVE202643499.txt # Research plan document
| الملف | الوصف |
|---|---|
report.md | تحليل المرحلة 1: فك حزمة boot.img، استخراج vmlinux، التحقق من الإزاحات |
GhostLock_CVE202643499_OPPO_PLS120_研究报告.md | تقرير البحث الكامل: العملية الكاملة، جميع التكرارات، تحليل الفشل، الاستنتاجات (620 سطرًا) |
يقع في IonStack/CVE-2026-43499/exploit/src/targets/oppo-pls120-BP2A.250605.015/target.h:
| المعامل | القيمة |
|---|---|
KIMAGE_TEXT_BASE | 0xffffffc008000000 |
MM_STRUCT_SZ | 0x3e8 (1000 بايت، تم التحقق منها من mm_cache_init) |
KERNELSNITCH_MTE_ENABLED | 1 (تم تفعيل البحث عن وسم عنوان MTE) |
KSNITCH_COLLISIONS | 2 (تحمّل big.LITTLE) |
KERNELSNITCH_MAX_MISMATCH | 1 (تحمّل ضوضاء التوقيت) |
SLIDE_MAX_ATTEMPTS | 1 (nfulnl غير متاح، تخطَّ إلى مسار FOPS) |
KERNEL_PAGE_SETUP_ATTEMPTS | 6 |
SLIDE_KERNEL_PAGE_SETUP_ATTEMPTS | 12 |
FOPS_KERNEL_PAGE_SETUP_ATTEMPTS | 72 |
# Cross-compilation for ARM64 Android
# Requires Android NDK r29 installed at /home/ubuntu/android-ndk-cache/android-ndk-r29/