
Usa CVE-2026-43499 para deshabilitar SELinux en Android
Extracción de solo escritura 1 de
JoinChang/ghostlock-oneplus
para CVE-2026-43499. Desactiva
SELinux enforcing en kernels OnePlus compatibles y vulnerables con un gestor de
arranque bloqueado, y no hace nada más: sin sobrescritura de credenciales, sin shell
root, sin KernelSU, sin bootstrap y sin fuga de KASLR.
CVE-2026-43499 es un use-after-free de rtmutex del kernel de Linux en la ruta de
reencolado futex PI. Durante la reversión del bloqueo de proxy, remove_waiter()
opera sobre current en lugar de la tarea del waiter, dejando el puntero
pi_blocked_on del waiter colgando. Está corregido en la rama principal en Linux
6.12.86 y versiones 6.12 más recientes.
Una única escritura PI de nodo hijo:
fake_right = base + 0x100 -> byte0 = 0 (enforcing), byte1 = 1
Reutiliza el heap spray del exploit completo y la ruta PI pselect, pero omite KASLR
(kaslr_slide = 0). Reintenta hasta 20 veces (con drenaje de slab entre intentos) y
sale una vez que /sys/fs/selinux/enforce lee 0.
La primitiva compartida (heap spray de util.c, ruta pselect de fops.c,
kernelsnitch y tablas de desplazamiento) se mantiene.
Ver src/devices/offsets.h, indexado por uname -r:
6.12.38-android16-5-...-ab14275539-4k6.12.38-android16-5-...-ab14552068-4k6.12.23-android16-5-...-ab14541642-4k (solo desplazamientos, no verificado)make # uses /opt/android-ndk (or $ANDROID_NDK_HOME)
Produce selinux_disabler, un PIE aarch64 para 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
Verificar:
adb shell cat /sys/fs/selinux/enforce # -> 0
Solo se necesita boot.img. Usa las utilidades de extracción en el
directorio de herramientas
del proyecto ascendente, luego agrega una entrada en src/devices/<device>/offsets.h
e inclúyela con #include desde src/devices/offsets.h.
Solo para fines autorizados de investigación de seguridad y educativos.
| Eliminado | Razón |
|---|
slide.c | Fuga de KASLR SLIDE — no necesario (slide = 0) |
pipe.c | R/W físico basado en pipes — solo usado por la etapa CFI/root |
root.c | Parcheo de cred / install_android_root — solo Escritura 2 |
miniadb.c | Cliente mini ADB bootstrap — no usado |
try_cfi_stage, install_child_root, repair/refresh/leak/restore asistentes (fops.c) | Etapa CFI / fuga KASLR / pipe-physrw — nunca alcanzada en la ruta de escritura personalizada |
perf_find_task, spawn_child, write_root_script, run_exploit, run_bootstrap (main.c) | Escritura 2 (cred → init_cred), shell root, KSU, bootstrap |