
Usa CVE-2026-43499 per disabilitare SELinux su Android
Estrazione della sola Write-1 di
JoinChang/ghostlock-oneplus
per CVE-2026-43499. Essa
disabilita l'enforcing di SELinux sui kernel OnePlus vulnerabili supportati con
bootloader bloccato e non fa nient'altro: nessuna sovrascrittura dei cred,
nessuna shell root, nessun KernelSU, nessun bootstrap e nessun leak di KASLR.
CVE-2026-43499 è un use-after-free del rtmutex del kernel Linux nel percorso di
requeue PI del futex. Durante il rollback del proxy-lock, remove_waiter() opera su current
invece che sul task del waiter, lasciando il puntatore pi_blocked_on del waiter
pendente. È corretto upstream in Linux 6.12.86 e nelle versioni 6.12 successive.
Una singola scrittura PI su nodo figlio:
fake_right = base + 0x100 -> byte0 = 0 (enforcing), byte1 = 1
Riutilizza l'heap spray + il percorso PI pselect dell'exploit completo, ma bypassa KASLR
(kaslr_slide = 0). Riprova fino a 20 volte (con svuotamento della slab tra
i tentativi) ed esce quando /sys/fs/selinux/enforce riporta 0.
La primitiva condivisa (heap spray di util.c, percorso pselect di fops.c,
kernelsnitch e tabelle degli offset) è mantenuta.
Vedi src/devices/offsets.h, indicizzati per uname -r:
6.12.38-android16-5-...-ab14275539-4k6.12.38-android16-5-...-ab14552068-4k6.12.23-android16-5-...-ab14541642-4k (solo offset, non verificato)make # uses /opt/android-ndk (or $ANDROID_NDK_HOME)
Produce selinux_disabler, un PIE aarch64 per Android API 35.
adb push selinux_disabler /data/local/tmp/a/e && chmod 755 /data/local/tmp/a/e
adb shell /data/local/tmp/a/e
Verifica:
adb shell cat /sys/fs/selinux/enforce # -> 0
È necessario solo boot.img. Usa le utility di estrazione del progetto
upstream nella directory tools,
poi aggiungi una voce in src/devices/<device>/offsets.h e un #include per essa
in src/devices/offsets.h.
Solo per scopi autorizzati di ricerca sulla sicurezza e a fini didattici.
| Rimosso | Motivo |
|---|
slide.c | leak di KASLR SLIDE — non necessario (slide = 0) |
pipe.c | R/W fisico basato su pipe — usato solo dallo stadio CFI/root |
root.c | patching dei cred / install_android_root — solo Write 2 |
miniadb.c | client mini ADB di bootstrap — non usato |
try_cfi_stage, install_child_root, helper repair/refresh/leak/restore (fops.c) | stadio CFI / KASLR-leak / pipe-physrw — mai raggiunto sul percorso custom-write |
perf_find_task, spawn_child, write_root_script, run_exploit, run_bootstrap (main.c) | Write 2 (cred → init_cred), shell root, KSU, bootstrap |