
Use a CVE-2026-43499 para desativar o SELinux no Android
Extração apenas de Write-1 de
JoinChang/ghostlock-oneplus
para CVE-2026-43499. Ela
desativa o SELinux enforcing em kernels OnePlus suportados e vulneráveis com
bootloader bloqueado e não faz mais nada: sem sobrescrita de cred, sem shell root, sem
KernelSU, sem bootstrap e sem vazamento de KASLR.
CVE-2026-43499 é um use-after-free do rtmutex do kernel Linux no caminho de requeue
do futex PI. Durante o rollback do proxy-lock, remove_waiter() opera sobre current
em vez da task do waiter, deixando o ponteiro pi_blocked_on do waiter
pendente (dangling). Foi corrigido upstream no Linux 6.12.86 e nas versões 6.12 mais recentes.
Uma única gravação de PI em child-node:
fake_right = base + 0x100 -> byte0 = 0 (enforcing), byte1 = 1
Ele reutiliza o heap spray + a rota de PI via pselect do exploit completo, mas contorna o KASLR
(kaslr_slide = 0). Ele faz até 20 tentativas (com drenagem de slab entre
as tentativas) e encerra assim que /sys/fs/selinux/enforce retornar 0.
A primitiva compartilhada (heap spray de util.c, rota pselect de fops.c,
kernelsnitch e tabelas de offsets) é mantida.
Consulte 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 (apenas offsets, não verificado)make # uses /opt/android-ndk (or $ANDROID_NDK_HOME)
Produz selinux_disabler, um 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
Verifique:
adb shell cat /sys/fs/selinux/enforce # -> 0
Apenas o boot.img é necessário. Use os utilitários de extração do
projeto upstream no diretório tools,
depois adicione uma entrada em src/devices/<device>/offsets.h e inclua-a (#include) a partir de
src/devices/offsets.h.
Apenas para pesquisa de segurança autorizada e fins educacionais.
| Removido | Motivo |
|---|
slide.c | Vazamento de KASLR SLIDE — não é necessário (slide = 0) |
pipe.c | R/W físico baseado em pipe — usado apenas pelo estágio CFI/root |
root.c | Patch de cred / install_android_root — apenas Write 2 |
miniadb.c | Cliente mini ADB de bootstrap — não utilizado |
try_cfi_stage, install_child_root, auxiliares repair/refresh/leak/restore (fops.c) | Estágio CFI / KASLR-leak / pipe-physrw — nunca alcançado no caminho de 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 |