
GhostLock (CVE-2026-43499) نسخة استغلال معدّلة لـ RootMyVivo Neo — iQOO Neo 11 (PD2520, SM8750, 6.6.89). للبحث المصرّح به على الأجهزة الخاصة فقط.
تفرّع من boxiaolanya2008/CVE-2026-43499-Neo11Plus، أُعيدت هيكلته لـ RootMyVivo Neo: أُزيل كل ما لا تحتاجه سيناريوهاتنا، وأُبقي على نواة الاستغلال المُختبرة دون تغيير في التوقيتات.
| المكوّن | السبب |
|---|---|
| تغيير الخلفية + قتل system_server | المصدر الرئيسي لإعادة التشغيل الناعم «التلقائي» وتغيّر الخلفية بعد الروت |
| خادم io (المنفذ 39555) | كان مطلوبًا فقط لـ kernelapp التصحيحي؛ التطبيق يعمل عبر su |
| طبقة tmpfs على /apex/com.android.virt/bin | قد تُعلّق zygote/system_server عند إعادة التشغيل الناعم (شاشة سوداء) |
| تثبيت su في mount-namespace الخاص بـ adbd | التطبيق يستدعي /data/local/tmp/su بالمسار الكامل |
| خدمة الإقلاع 10-neo11-su.sh | التثبيت يقوم به التطبيق: persist.adb.tcp.port + adb_keys + ksud |
| جداول إزاحات الأجهزة الأخرى | فقط PD2520-BP2A.250605.031.A3 |
| kernelapp (app/) | استُبدل بوظائف التطبيق |
panic_on_oops=0، panic_on_warn=0 (حماية من الـ panics)،
kptr_restrict/dmesg_restrict، تسميم AVC (permissive دون كسر policycap)/system/bin/su عند ظهورهالاستغلال يضع /data/local/tmp/su (0755، root:root، سياق system_file)
ويشغّل خادمًا بـ socket على /data/local/tmp/temp_su.sock.
التطبيق يستدعي su بالمسار الكامل — /apex لا يُلمس إطلاقًا.
cd exploit
PATH=/data/data/com.termux/files/usr/bin:$PATH \
make HOST_CLANG=/data/data/com.termux/files/usr/bin/clang \
NDK_ROOT=/root/android-sdk/ndk/26.1.10909125
build/PD2520-BP2A.250605.031.A3/bin/preload.so (~140 كيلوبايت)
وbuild/embed/su_daemon_aarch64_pie (su، ~11 كيلوبايت)6.6.89-android15-8-g1f71897ac249-abogki467805059-4k (الإزاحات من
kallsyms+BTF لهذا boot.img؛ تغيير النواة = إعادة توليد target.h)cd /data/local/tmp/rmv && LD_PRELOAD=$PWD/preload.so /system/bin/trueRMV_ATTEMPTS=N — عدد المحاولات الكاملة (افتراضيًا 3)RMV_RETRY_DELAY=N — التوقف بين المحاولات بالثواني (افتراضيًا 8)NEO11_* — مقابض upstream (delay/nice/attempts) محفوظة| الآلية | ما تفعله | ما تحمي منه |
|---|
| safety_quiesce | قبل مسار PI تنتظر loadavg < 4 (حتى 10 ثوانٍ) | waiter في إطار آخر → panic عند الحمل النظامي العالي |
| cred-guard | قبل كتابة cred تتحقق من أن المؤشرات عناوين kernel قانونية | كتابة مؤشر غير صالح → تلف فوري في task_struct → panic |
| حلقة retry | حتى 3 دورات كاملة (كل واحدة في fork جديد) مع توقف 8 ثوانٍ | يانصيب التوقيت: المحاولة الثانية غالبًا تنجح، بينما upstream كان يستسلم |
| spin تكيّفي | خيوط consumer: 200 تكرار yield → nanosleep(0.2 ميكروثانية) | استهلاك 100% من CPU طوال فترة الاستغلال |