
GhostLock (CVE-2026-43499) exploit fork for RootMyVivo Neo — iQOO Neo 11 (PD2520, SM8750, 6.6.89). For authorized research on own devices only.
Форк boxiaolanya2008/CVE-2026-43499-Neo11Plus, переработанный под RootMyVivo Neo: убрано всё, что не нужно нашему сценарию, оставлено проверенное ядро эксплойта без изменений таймингов.
| Компонент | Причина |
|---|---|
| Смена обоев + убийство system_server | главный источник «самопроизвольных» soft reboot и смены обоев после рута |
| io-демон (порт 39555) | нужен был только отладочному kernelapp; приложение работает через su |
| tmpfs-оверлей на /apex/com.android.virt/bin | мог завесить zygote/system_server при soft reboot (чёрный экран) |
| Установка su в mount-namespace adbd | приложение вызывает /data/local/tmp/su по полному пути |
| Boot-сервис 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 (защита от паник),
kptr_restrict/dmesg_restrict, AVC-отравление (permissive без ломки policycap)/system/bin/su, когда тот появляетсяЭксплойт кладёт /data/local/tmp/su (0755, root:root, system_file context)
и стартует демон с сокетом /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 просто сдавался |
| адаптивный спин | consumer-потоки: 200 итераций yield → nanosleep(0.2 мс) | 100% CPU на всём протяжении эксплойта |